awk und printf in der bash
Ich versuche, um die gerundete Anzahl der durchschnittlichen Belastung in den letzten 5 Minuten. So, hier geht mein Befehl:
uptime | awk -F, '{print $5}'|printf "%.0f\n"
Scheint es falsch, da es immer mir 0.
Wenn ich versuchte, eine variable zu verwenden, als Vermittler zwischen awk und printf, dann ist es richtig
avgload=$(uptime | awk -F, '{print $5}')
printf "%.0f\n" $avgload
So, nichts falsch mit meinem ersten Versuch?
Dank und Grüße!
UPDATE:
Nur für die Durchschnittliche Auslastung in den letzten 5 Minuten, hier ist die Ausgabe von uptime auf meinem linux-server (Kubuntu)
$ uptime
13:52:19 up 29 days, 18 min, 15 users, load average: 10.02, 10.04, 9.58
Auf meinem laptop (Ubuntu) ist es ähnlich
`$ uptime
13:53:58 bis 3 Tage, 12:02, 8 users, load average: 0.29, 0.48, 0.60 `
Deshalb nehme ich das 5. Feld.
- Beachten Sie, dass das problem ist, weil printf nicht akzeptieren parameter input auf diese Weise. Müssen Sie mit xargs oder backticks wie bereits an verschiedenen Lösungen.
- Nee, nur verwenden
awk
zu tun, die Formatierung. Es hatprintf
gebaut. - So uptime |awk -F, '{printf "%0.f\n",$5}' dann.
- Danke Jungs!
- Du bist herzlich willkommen. Bitte wählen Sie eine der Antworten, als die Antwort, markieren Sie diese Frage abgeschlossen.
- Es ist wohl besser, nehmen
$(NF-1)
statt $5, weil das Datum und Zeit, Informationen, die anders formatiert für kürzere Laufzeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem 5. Komma getrennt Feld aus der Betriebszeit der Ausgang ist nicht existent (auf meinem system zumindest), das ist, warum Sie immer null. Die 5-Minuten Betriebszeit ist das zweite-to-Letzte Feld, so funktioniert dies:
awk
zu tun, die Formatierung, anstatt Rohrleitungen seinen Ausgang unnötig zu einem anderen Befehl.Einfachste version (mit eingebauten awk printf - kudos Dennis Williamson):
Original Antwort: Führen Sie es durch xargs statt.
xargs
kaufen Sie hier? Vermutlich ist die Ausgabe vonuptime
ist eine einzige Zeile.xargs
tut, aber ich habe vergessen, dass printf nicht akzeptieren stdin!Können Sie nur
Die backticks sind im wesentlichen Substitutionen, so was auch immer die Ausgabe von
uptime | awk -F, '{print $5}'
ist, wird das argumentprintf
.Das problem mit dem ersten Ansatz ist, dass printf nur nicht akzeptieren Argumente aus
stdin
; wenn es hat Argumente ausstdin
, dann hätte es geklappt. Auch, keine Argumente an printf anscheinend bedeutet "put zero für meine Argumente".Ich glaube nicht, dass Sie sich ernähren können, um den input von printf () auf stdin. Versuchen Sie diese version:
Wenn Sie /proc gemountet können Sie /proc/loadavg:
Den obigen code verwendet, nur built-in-shell-Befehle. Allerdings
wenn Sie möchten, können Sie awk auch: