#!/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 始终选择行的最后一个元素。