AWKを使用して別の行に異なるフィールドを印刷する方法

AWKを使用して別の行に異なるフィールドを印刷する方法
Here is my sample :
PING my.host.local (10.10.10.10): 56 data bytes
64 bytes from 10.10.10.10: icmp_seq=0 ttl=63 time=2.034 ms

--- my.host.local ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.034/2.034/2.034/0.000 ms

私は次のことをしたいと思います:/ 64 bytes /なら、次のように印刷します: "'my.host.local' is up"

問題は、/ 64バイト/の正規表現を実行すると、ホスト名「my.host.local」を示す行が失われ、そのフィールドを使用して最終メッセージを印刷できないことです。

あなたは何をしますか?

乾杯、

ベストアンサー1

変数を使用してホスト名を保存します。

awk '/^PING/ { host = $2 } /^64 bytes/ { print host " is up" }'

ホストがダウンしたときに何かをするには、応答が見えるかどうかに注意を払い、最後に両方のケースを処理する必要があります。

awk '/^PING/ { host = $2 }
     /^64 bytes/ { up = 1 }
     END {
       if (up) { print host " is up" }
       else { print host " is down" }
     }'

おすすめ記事