Frage Wie parse Watch Command Ausgabe auf die letzten 5 Ziffern?


Aus dem Befehl

watch -n1 "ifconfig eth0 | grep GiB". Ich habe die Ausgabe unten angegeben,

Jetzt will ich nur noch die letzten 5 Ziffern (GiB). Ich habe eine Regex dafür geschrieben, und es scheint so Arbeit 

(\ d {1,4}) (?!. * \ d) \ sGiB

Das einzige Problem ist, dass ich es nicht mit dem oben gezeigten Befehl verwenden kann? Ich benutze Ubuntu jede Hilfe

enter image description here


1
2018-05-21 14:34


Ursprung




Antworten:


Sie würden den Befehl watch nicht parsen, Sie würden jeden Befehl analysieren, der gerade läuft. Ich habe Ihre Suche so angepasst, dass sie einem größeren Bereich möglicher Ausgaben von ifconfig entspricht:

$ ifconfig eth0 | grep -Eo '[0-9\.]+ [PTGMK]i?B'
164.8 GB
142.6 GB

Dies wird durch greps ermöglicht -E Argument, das eine breitere Syntax und ermöglicht -o die nur übereinstimmende Zeichenfolgen ausgibt.

Wenn Sie das wiederholen möchten, können Sie es aber in eine Shell umbrechen, damit die Pipe richtig interpretiert wird:

watch -x sh -c "ifconfig eth0 | grep -Eo '[0-9\.]+ [PTGMK]i?B'"

Aber meiner Meinung nach ist das nicht so nützlich wie es ist ... watch ist wirklich nur gut für eine echte Person, die den Bildschirm beobachtet. Wenn das der Fall ist, sind Sie alle fertig, aber wenn Sie regelmäßig etwas mit diesen Zahlen machen möchten, verwenden Sie wahrscheinlich das falsche Werkzeug.


3
2018-05-21 14:47



Danke für den Vorschlag, ich benutze die Uhr für eine Zeitbasis, ich überlege, iptraf in Zukunft zu verwenden, habe ich deinen Befehl ausgeführt, aber ich denke nicht, dass es mir Änderungen in Echtzeit gibt? - asadz
Ja, es wird alle zwei Sekunden aktualisiert. Offensichtlich müssen Sie, sobald Sie GiB erreicht haben, eine große Menge an Verkehr verschieben, bevor es sich ändert. - Oli♦
Ich bin nicht sicher, was sh -c tut, scheint wie ein Zähler, der Unterschied, dass ich diesen Befehl bekomme, ist, dass ich pro Sekunde Änderungen an der Ausgabe nicht sehen kann, wie ich im ursprünglichen Befehl tun kann. Der Verkehr, den ich bekomme, ist etwa 30 Mb / s und der Verkehr über die gesamte Bandbreite. - asadz
sh -c "..." ist eine Möglichkeit, mehrere Befehle auszuführen, die andernfalls außerhalb dieser Shell zusammen interpretiert würden. Hier erlaubt es mir, den internen Ausgang von ifconfig durch grep. Der SH-Befehl wird alle 2 Sekunden ausgeführt (watch's Standard) und wiederum führt sh den Befehl, den wir ihm geben. Wenn du möchtest, dass es jede Sekunde ist, bleib a -n1 nach dem -x. - Oli♦
(Und das ist getestet. Es funktioniert. Ich saß gerade und beobachtete die Zahlen während ich einen Test mit iperf) - Oli♦