PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iostat mit awk parsen



403
13-06-2008, 02:17
Hallo Forum,

da ich hier schon einige gute awk Loesungen gefunden habe, moechte ich euch diese
nicht vorenthalten (und warte natuerlich ;)



iostat -E|grep Error| grep -v Media| awk '{
if ($4 >0) print ($1, $4, $2, $3);
if($7 >0) print ($1, $7, $5, $6);
if ($10 >0) print ($1,$10, $8, $9); }' | tr -d ':'


Sample Output:


ssd183 1 Soft Errors
ssd183 4 Hard Errors
ssd183 10 Transport Errors
ssd272 12 Transport Errors
ssd273 1 Soft Errors
ssd273 9 Transport Errors



Gruss
403

jan61
14-06-2008, 23:52
Moin,


... (und warte natuerlich ;)

Auf Mecker? Kannst Du haben. :)

Warum lässt Du - wenn Du schon den awk für Deine Zwecke einspannst - diesen nicht die ganze Arbeit machen? Die grep (und die mit den Pipes verbundenen Subshells) sind überflüssig, Pattern-Matching kann der awk auch. Und auch den tr kannst Du für diesen Fall nach Hause schicken, awk kann auch Zeichen wegputzen:

iostat -E | awk ' /Media/ { getline; }
/Error/ { gsub(/:/, "");
if ($4 >0) print ($1, $4, $2, $3);
if($7 >0) print ($1, $7, $5, $6);
if ($10 >0) print ($1,$10, $8, $9); }'
Alles ungetestet, iostat gibts auf meinem System nicht.

Jan

403
16-06-2008, 10:49
Hallo Jan,

Endlich wieder Gemecker. ;)

Also ich habe natuerlich versucht die greps zu entfernen und dabei gelernt dass man z.B. !/Media/ statt /!Media/ schreiben sollte. Aber da dann noch andere unerwuenschte Zeilen aufgetaucht sind, bin ich erstmal bei den greps geblieben, mit dem Rest experimentier ich mal. (gsub steht schon laenger auf der Todo Liste)

Gruss
403

jan61
18-06-2008, 20:44
Moin,

andere unerwünschte Zeichenketten kannst Du mit dem gleichen Mechanismus wie "Media" entfernen. Du hast im awk sogar noch bessere (oder anders gesagt: leichter zu durchschauende) Möglichkeiten zum Pattern-Matching, weil Du nicht nur die gesamte Zeile, sondern auch gezielt einzelne Felder flöhen kannst: $5 ~ /Pattern/ oder eben $6 !~ /Pattern/. Und das kann man alles noch verknüpfen - ich sehe keinen Grund, davor einen Rattenschwanz überflüssiger, bremsender und ressourcenfressender Shell-Befehle und Pipes zu hängen. Jeder grep muss die Datei / STDIN erneut einlesen + auswerten, im awk kriegst Du das in einem Abwasch hin:


jan@jack:~/tmp> echo -e "Media\nMurks\nMist\nMist mit Error" | \
> awk ' ! (/Media/ || /Murks/) && /Error/ { print } '
Mist mit Error
Jan