从 linux 命令行 ping 中仅提取整数毫秒
Extract only integer milliseconds from linux commandline ping
我尝试从 OpenWRT 命令行中的连续 ping 输出中提取整数毫秒。来自 ping 8.8.8.8
的示例
64 bytes from 8.8.8.8: seq=6 ttl=55 time=6.356 ms
64 bytes from 8.8.8.8: seq=7 ttl=55 time=6.520 ms
...
期望输出应如下所示:
6
6
...
只是整数(数字的左边部分)。没有小数部分也没有点。
我尝试使用管道切割输出,首先切割等号 ping 8.8.8.8 | cut -d '=' -f 4
有效
6.389 ms
6.051 ms
...
然后也切割点以仅获得整数 ping 8.8.8.8 | cut -d "=" -f4 | cut -d '.' -f1
但随后根本没有输出显示。我也尝试过使用 awk,但是当我对这些命令使用多个管道时,没有输出。你能告诉我怎么做吗?
您可以通过 perl(例如)管道输出并使用简单的正则表达式:
ping -c3 8.8.8.8 | perl -nle '/time=(\d+)/ && print '
这将打印整数部分。
您还可以使用 printf
将毫秒四舍五入为最接近的整数
ping -c3 8.8.8.8 | perl -ne '/time=([\d\.]+) ms/ && printf "%.0f\n", '
我尝试从 OpenWRT 命令行中的连续 ping 输出中提取整数毫秒。来自 ping 8.8.8.8
64 bytes from 8.8.8.8: seq=6 ttl=55 time=6.356 ms
64 bytes from 8.8.8.8: seq=7 ttl=55 time=6.520 ms
...
期望输出应如下所示:
6
6
...
只是整数(数字的左边部分)。没有小数部分也没有点。
我尝试使用管道切割输出,首先切割等号 ping 8.8.8.8 | cut -d '=' -f 4
有效
6.389 ms
6.051 ms
...
然后也切割点以仅获得整数 ping 8.8.8.8 | cut -d "=" -f4 | cut -d '.' -f1
但随后根本没有输出显示。我也尝试过使用 awk,但是当我对这些命令使用多个管道时,没有输出。你能告诉我怎么做吗?
您可以通过 perl(例如)管道输出并使用简单的正则表达式:
ping -c3 8.8.8.8 | perl -nle '/time=(\d+)/ && print '
这将打印整数部分。
您还可以使用 printf
ping -c3 8.8.8.8 | perl -ne '/time=([\d\.]+) ms/ && printf "%.0f\n", '