Frage zu awk und Arrays
-
Hallo, ich habe das folgende Skript programmiert um mir Informationen über Volume Groups etc. anzeigen zu lassen.
#!/bin/ksh # clear printf "----------+------------------+--------------------------+\ ----+-----------------+\n" printf "%-9s | %-17s| %-25s| %-2s | %-12s |\n" " Volume" \ " Physical" " Path name of the" "MC" " Status" printf "%-9s | %-17s| %-25s| %-2s | %-12s |\n" " group" \ " volume" " logical volume" printf "----------+------------------+--------------------------+\ ----+-----------------+\n" # VGs ermitteln set -A VGArray $(vgdisplay 2>/dev/null | awk '/Name/ { print $3 }') i=0 # Fuer alle VG-Elemente im Array while [ i -lt ${#VGArray[*]} ] do # Status der VG ermitteln Status=$(vgdisplay ${VGArray[i]} 2>/dev/null | \ awk '/Status/ { print $3 }') printf "%-9s | %-17s| %-25s| %-2s | %-12s |\n" \ ${VGArray[i]} "" "" "" $Status # PVs zum VG ermitteln set -A PVArray $(vgdisplay -v ${VGArray[i]} 2>/dev/null | \ awk '/PV Name/ { print $3 }') j=0 while [ j -lt ${#PVArray[*]} ] do # Status der PV ermitteln Status=$(pvdisplay ${PVArray[i]} | awk '/Status/ { print $3 }') printf "%-9s | %-17s| %-25s| %-2s | %-12s |\n" \ "" ${PVArray[j]} "" "" $Status # LVs zum PV ermitteln let Zeile1=$(pvdisplay -v ${PVArray[j]} | grep -n Distribution | \ cut -d: -f1)+2 let Zeile2=$(pvdisplay -v ${PVArray[j]} | grep -n extents | \ cut -d: -f1)-2 # Alle LVs zwischen den Zeilen auslesen und wo Zeile1>2 ist if [ Zeile1 -gt 2 ] then set -A LVArray $(pvdisplay -v ${PVArray[j]} | sed -n -e \ $Zeile1,$Zeile2"p" | awk '{ print $1 }' | \ sort +1) k=0 while [ k -lt ${#LVArray[*]} ] do # Mirror Copie ermitteln Mirror=$(lvdisplay ${LVArray[k]} | \ awk '/Mirror/ { print $3}') # Status LV ermitteln Status=$(lvdisplay ${LVArray[k]} | \ awk '/Status/ { print $3 }') printf "%-9s | %-17s| %-25s| %-2s | %-12s |\n" \ "" "" ${LVArray[k]} $Mirror $Status let k=k+1 done fi let j=j+1 done let i=i+1 # Zeile nach jeder VG printf "----------+------------------+--------------------------+\ ----+-----------------+\n" done
Jetzt habe ich von einem Kollegen erfahren, dass die Arrays bei großen Datenmengen nicht mehr ausreichend sein können und man daher lieber direkt alles im awk lösen sollte, da dieser bis zum Speicherüberlauf arbeitet.
Kann mir jemand einen Lösungsansatz geben, wie ich dieses Skript anpassen könnte um auf die Nutzung von Arrays zu verzichten?
-
Kannstes ja mal mit perl versuchen
mfg
-
Hallo Mr. Perl!
Die Aussage hilft mir jetzt nicht wirklich weiter. Ich möchte schon gerne awk bzw. auf jedem System zur Verfügung stehende Tools einsetzen.