我想将只有延迟时间的 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}'
它会起作用的。放在一起的时候。它不会。 我想知道这是为什么。
最佳答案
当使用 grep
进行管道传输时,您没有得到任何输出 由于 grep
命令中的 block 缓冲。
您可以让 grep
使用行缓冲,以便获取每一行的输出:
ping google.com | grep --line-buffered -v "PING" | awk -F '[:=]' '{print $5}'
但是您不需要grep
,因为您可以使用单个awk
来完成此操作:
ping google.com | awk -F '[:=]' 'NR>1{print $5}'
关于linux - 使用 grep 和 awk 过滤 ping 结果完全不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162250/