linux - 使用 grep 和 awk 过滤 ping 结果完全不起作用

标签 linux shell awk grep

我想将只有延迟时间的 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/

相关文章:

bash - 查找包含给定文件的目录?

linux - 如何为一些行运行 awk。?

awk 选择带有变量的行,无法打开没有这样的文件

bash - 使用 awk 搜索主目录

linux - .so 搜索路径

c - Debian 中 login_cap.h 的 rlim_t 错误

python subprocess.call() 在将参数传递给 shell 脚本之前修改参数?

linux - 如何验证 shell 脚本中的参数数量(强制和可选)?

linux - 对 nvidia GPU 上的计算单元和预期核心的混淆

c - Linux 命令中的更多选项和编译错误