我想将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}'
它会起作用。将它们放在一起时它没有赢。 我想知道原因。
答案 0 :(得分: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}'
答案 1 :(得分:0)
稍加修改:
ping somesite | awk -F '[:=]' 'NR!=1 {print $5}'
答案 2 :(得分:0)
我已经从答案中找到了答案 https://askubuntu.com/questions/562344/what-does-grep-line-buffering-do
因此,在将行发送到awk之前,grep会将输出缓冲到4096字节。 grep选项--line-buffered将解决我的问题。
答案 3 :(得分: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}'