在部分 ping 输出旁边显示时间和日期

在部分 ping 输出旁边显示时间和日期
#!/bin/bash
ping -c 1 8.8.8.8 | awk '{print $7}'
date

因此,对于上面的代码,我希望它以下面的格式显示日期和时间

Tue May 5 11:11:11 UTC 2020  time=0.838 ms

到目前为止它打印了这个输出

data.
time=1.24
packet
Tue May  5 23:31:33 UTC 2020

我想要 UTC 2020 旁边的 time=1.24

答案1

ping -c 1 8.8.8.8 | awk -v date="$(date)" '$7 ~ /^time/{ print date, $7, $8 }'

这会将命令替换的输出保存date在 awk 变量中date,并且仅当第 7 个字段以 开头时才打印日期以及第 7 个和第 8 个字段time

答案2

如果按照指定的方式,这应该出现。

echo -n "$(date) "
ping -c 1 8.8.8.8 | awk '$7 ~ /^time=/ {print $7}'

不完全清楚您是否需要单位字段,因为您的帖子有冲突的示例。如果这样做,请像这样改变结尾print $7,$8

答案3

echo "$(date)  time=$(ping -c 1 8.8.8.8 | awk '/transmitted/{print $NF}')"

短语 $( .... ) 表示运行括号内的命令并在此处插入输出。

ping 命令按照其他建议,但输出的过滤方式略有不同 - 这只是 ping 的输出...

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=22.9 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.919/22.919/22.919/0.000 ms

awk 命令搜索与 /translated/ 匹配的行,然后打印该行中的最后一个值,在本例中是时间值。因为行中的单词数可能会根据“ping”实现或输出等而变化...我们使用 NF 始终选择行的最后一个元素。

相关内容