Frage

Warum die Ausgabe von iostat im folgenden Befehl nicht in die Datei umgeleitet wird:

iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization 

Verhält sich iostat anders als jeder andere Befehl?

Danke im Voraus

War es hilfreich?

Lösung

Sieht so aus, als müssten Sie einen Zähler hinzufügen, um dem Stream mitzuteilen, wann er beendet werden soll( Mann Iostat ).Sie fügen nur das Intervall hinzu:

If the interval parameter is specified without the count parameter, the iostat command generates reports continuously. 

Wenn ich es versuche:

iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile

Die 6 erzählt iostat nach 6 Iterationen in 3-Sekunden-Intervallen anzuhalten.Nach den Iterationen iostat ist abgeschlossen und ich erhalte eine output Datei.

Alternativ können Sie einen Ausdruck auswählen, um das Beenden des awk-Skripts zu veranlassen.Wenn ich es versuche:

iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2

Ich bekomme nur 3 Zeilen rein output2 was Sinn macht, weil iostat -x erzeugt Ausgabezeilen im Wert von etwa einem Bildschirm auf dem Bildschirm.

Sie können das awk auch dazu zwingen fflush(stdout) in jedem Druckzyklus:

iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3

und dann schließen iostat mit einem <ctrl+c> aus der Schale.

Andere Tipps

Die Ursache Ihres Problems liegt darin, dass die Pipe gepuffert ist (wahrscheinlich). 4k), wenn Sie also lange genug warten, bis die Ausgabe in die Datei geschrieben wird, ist diese nicht mehr leer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top