Mithilfe von time
habe ich den gewünschten Teil der Ausführungszeit eines Skripts erhalten, muss ihn aber durch eine Zahl (30) teilen. Wie mache ich das?
....| awk '/^user/ {interest=($2)/(30);print "Time user divide by 30: " interest }'
In $2 habe ich das Ergebnis 0m4.968s und möchte es durch 30 teilen und ausdrucken.
Antwort1
Diese Ausgabe 0m4.968s
sieht aus wie das Standardformat für Bashs integrierte Funktion time
. Um sinnvolle Berechnungen durchführen zu können, müssten die Minuten in Sekunden umgewandelt werden. Es ist jedoch einfacher, einfach das Ausgabeformat zu ändern. Wenn uns nur die Benutzerzeit interessiert, TIMEFORMAT=%U
sollte die Einstellung genau diese in Sekunden ausgeben.
$ TIMEFORMAT=%U
$ time somecommand
4.968
Allerdings ist das Weiterleiten der Ausgabe des integrierten Programms time
etwas umständlich, da die gesamte Pipeline zeitlich gesteuert werden muss, aber Folgendes sollte funktionieren:
$ (time somecommand ) 2>&1 | awk '{print $1 / 30}'
0.1656
Oder wenn wir die Zeit im Originalformat analysieren müssen, mit Minuten getrennt von Sekunden, vielleicht so etwas:
$ echo "user 0m4.968s" |
awk '/user/ {split($2, a, "m"); secs = a[1]*60 + a[2]; print secs / 30}'
0.1656