#!/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の横に時間= 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を使用します。