So extrahieren und sortieren Sie Ping-Zeiten aus einer Textdatei in eine andere Textdatei/Liste

So extrahieren und sortieren Sie Ping-Zeiten aus einer Textdatei in eine andere Textdatei/Liste

Ich habe eine Protokolldatei, die die Pings einer bestimmten Website in einer Textdatei enthält, die pingoutput.txtjede Ping-Antwort zeilenweise trennt. Jetzt muss ich aus dieser Textdatei die dazwischenliegende Roundtrip-Zeit extrahieren time=und msin eine andere Textdatei oder Liste einfügen, die ich dann von klein nach groß sortieren kann.

64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Außerdem ist die pingoutput.txtDatei groß und hat etwa 86400 Zeilen. Ich mache das über ein Shell-Skript unter Linux.

Antwort1

Das funktioniert bei mir:

sed 's/.*time=\([0-9]*\) .*/\1/' times | sort -n > outfile

Wo timesist diese Datei:

cat times 
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Und outfilesieht so aus:

cat outfile 
202
206
215

Antwort2

Sie können auch Perl Regex und Grep verwenden

grep -oP '(?<=time\=).*' pingoutput 

Antwort3

Sie können die Zeit mit diesem Beispielskript extrahieren:

awk -F\= '{print int($4)}' pingoutput.txt 

Es verwendet = als Trennzeichen und die int-Funktion, um nur die Zahlen der Zeichenfolge „202 ms“ zu erhalten.

Um die Ausgabe in eine andere Datei umzuleiten, verwenden Sie den folgenden Befehl:

awk -F\= '{print int($4)}' pingoutput.txt > times.txt

Zum Sortieren der Ausgabe können Sie die Ausgabe von awk an den Sortierbefehl weiterleiten

awk -F\= '{print int($4)}' pingoutput.txt |sort -n > times.txt

Antwort4

Wenn Sie die pcreMöglichkeit haben, mitgrep

$ grep -oP 'time=\K\d+' pingout.txt 
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -n
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -nr
215
206
202
  • time=\K positiver Blick zurückdie Zeichenfolge time=- diese ist nicht Teil der Ausgabe
  • \d+eine oder mehrere Ziffern, kann auch [^ ]+zum Extrahieren anderer Zeichen als Leerzeichen verwendet werden

Um die Ausgabe in einer Datei zu speichern, verwenden Sie die >Umleitung

$ grep -oP 'time=\K\d+' pingout.txt | sort -n > op.txt
$ cat op.txt 
202
206
215

verwandte Informationen