Ich habe eine Protokolldatei, die die Pings einer bestimmten Website in einer Textdatei enthält, die pingoutput.txt
jede Ping-Antwort zeilenweise trennt. Jetzt muss ich aus dieser Textdatei die dazwischenliegende Roundtrip-Zeit extrahieren time=
und ms
in 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.txt
Datei 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 times
ist 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 outfile
sieht 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 pcre
Mö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 Zeichenfolgetime=
- 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