2016-12-15 4 views
1

Ich möchte die Ping-Ausgabe mit nur seiner Verzögerungszeit zu einem Text pipen. während ich tun, bekomme ich dies erwartet alsFilter Ping-Ergebnis mit Grep und awk funktioniert überhaupt nicht

ping somesite 
PING somesite (220.181.57.217) 56(84) bytes of data. 
64 bytes from 220.181.57.217: icmp_seq=1 ttl=52 time=43.4 ms 
64 bytes from 220.181.57.217: icmp_seq=2 ttl=52 time=43.7 ms 
64 bytes from 220.181.57.217: icmp_seq=3 ttl=52 time=43.4 ms 

Dann mache ich dieses

ping somesite | awk -F '[:=]' '{print $5}' 

43.3 ms 
43.2 ms 
43.3 ms 
43.2 ms 
43.2 ms 
43.1 ms 
43.1 ms 
43.3 ms 
43.2 ms 
43.6 ms 
43.3 ms 
43.3 ms 

So ist die erste Zeile leer ist, dann ich dachte ich zum ersten Mal davon bekommen hatte zu befreien.

ping somesite | grep -v "PING" | awk -F '[:=]' '{print $5}' 

Aber es gibt keine Ausgabe. Wenn ich entweder

ping somesite | grep -v "PING" 

oder

ping somesite | awk -F '[:=]' '{print $5}' 

Es wird funktionieren. Wenn man sie zusammenstellt. Es wird nicht. Ich würde gerne den Grund dafür wissen.

Antwort

3

Sie erhalten keine Ausgabe, wenn Sie mit grepwegen der Pufferung in grep Befehl führen.

Sie können grep machen verwenden Sie die Linie Pufferung so für jede Zeile der Ausgabe:

ping google.com | grep --line-buffered -v "PING" | awk -F '[:=]' '{print $5}' 

jedoch Sie brauchen nicht grep, weil Sie diese mit einzelnen awk tun können:

ping google.com | awk -F '[:=]' 'NR>1{print $5}' 
+2

danke für die --line-gepufferte info –

+1

danke, ich nur figu lösche es aus. –

0

Mit einer kleinen Änderung:

ping somesite | awk -F '[:=]' 'NR!=1 {print $5}' 
0

Checking mit NR (Anzahl der Datensätze) tatsächlich ersten Datensatz aus der Ausgabe entfernen,

ping somesite | awk -F '[:=]' 'NR!=1 {print $5}' 

oder

ping somesite | awk -F '[:=]' 'NR>1 {print $5}' 

Mit NF (Anzahl der Felder) überprüfen können, eine solche Aufzeichnung zu filtern, was passt nicht in muster,

ping somesite | awk -F '[:=]' 'NF==5 {print $5}'