2016-12-15 80 views
1

我想将ping输出仅延迟到文本的延迟时间。 而我这样做,我得到这个预期使用grep和awk过滤ping结果不起作用

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 

然后我做这个

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 

所以,第一行是空白的,那么我想,我得先摆脱它。

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

但是没有任何输出。 当我做任何

ping somesite | grep -v "PING" 

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

它将工作。将它们放在一起时。它不会。 我想知道这个原因。

回答

3

由于块缓冲在grep命令,管道使用grep时,您没有得到任何输出。

您可以grep使用行缓冲因此得到输出的每一行:

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

但是你不需要grep,因为你可以做到这一点使用单awk

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

感谢您的线 - 缓冲信息 –

+1

谢谢,我只是figu冲出来。 –

0

稍作修改:

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

与NR(记录数量)检查实际上从输出中删除第一条记录,

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

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

你可以用NF(字段数)检查过滤任何该等纪录它不适合模式,

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