ping結果を単純な形式(例:「10ms」)で印刷します。

ping結果を単純な形式(例:「10ms」)で印刷します。

「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

その他アッ方法:

ping -c1 www.google.com | awk -F'=' 'NR==2{ print strftime("[%T]",systime()),$NF; exit}'
[01:35:47] 41.5 ms

  • -F'='- カスタムフィールド区切り記号

  • $NF- 最後のフィールド値

  • exit- 2番目のレコードへの入力処理を即座に停止します。

関連情報