每当我运行“ping -c 1 www.google.com”时,我都会得到以下结果:
PING www.google.com (xxx.xx.xxx.xxx) 56(84) bytes of data.
64 bytes from xxxxxxxx-xx-xxxxxxxxxx.net (xxx.xx.xxx.xxx): icmp_seq=1 ttl=56
time=25.8 ms
--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 25.816/25.816/25.816/0.000 ms
但是,我想以简单的格式打印出 ping,如下所示:
[23:00:25] 25.8 ms
我怎样才能实现这个目标?到目前为止我已经尝试过
ping -c 1 www.google.com | grep -oP '(?<=time\s/)w+' > ping.txt
打印不带时间的 ping,但是正如您可能猜到的那样,它不起作用。
答案1
尝试
ping -c 1 www.google.com | awk 'NR==2{print strftime("[%T]",systime()),substr($8,6),"ms"}'
使用获取当前时间systime()
并将其格式化为 %T 表示形式 (hh:mm:ss) strftime
。然后打印字段 8 的相关部分,以消除time=
废话。
例子
ping -c 1 www.google.com | awk 'NR==2{print strftime("[%T]",systime()),substr($8,6),"ms"}'
[21:32:05] 1.03 ms
答案2
其他awk方法:
ping -c1 www.google.com | awk -F'=' 'NR==2{ print strftime("[%T]",systime()),$NF; exit}'
[01:35:47] 41.5 ms
-F'='
- 自定义字段分隔符$NF
- 最后一个字段值exit
- 在第二条记录上立即停止处理输入