他のジャンプホストとのSSH経由でping通信を行うホストのping接続を確認しています。 awkを使用して成功したパケットのping回数を印刷したいと思います。
xajvtl001:/home/root #ssh -qn xckvl002"ping -w2 -c3 xcvtc012| grep packets"
3 packets transmitted, 3 packets received, 0% packet loss
受信したパケット数に基づいて予想される出力値は3です。
答え1
GNU grepがある場合:grep -oP '\d+(?= packets received)'
「受信したパケット」の後の数字を見つけます。
答え2
受信したパケット数を探している場合:
ssh -qn xckvl002 "ping -w2 -c3 xcvtc012 | awk '/packets transmitted,/ {print \$4}'"
リモートコマンドの周囲に二重引用符を使用しているため、内部一重引用符は直接引用符の意味を失うため、このような文字は$
まだエスケープする必要があります。これがバックスラッシュがで使用される理由ですprint \$4
。
の実装はping
異なる出力を持つことができます。私の場合はN packets received
そうですReceived = N
。検索パターン(例ではawk
スラッシュで囲まれている)が要約行を正しく識別していることを確認することをお勧めします。また、出力にスペースで区切られたフィールド数が異なる場合は、フィールド変数に$4
4以外の数字を使用する必要があります。
sed
編集:興味のある人のためのソリューション:
ssh -qn xckvl002 "ping -w2 -c3 xcvtc012 | sed -nr 's/.*([0-9]+)\s*received,.*/\1/p'"
答え3
次のコマンドを使用しました。
# ping -c3 hostname|awk '/received/{print $0}'| awk -F "," '{print $2}'|sed -r "s/^\s+//g"| awk '{print $1}`
出力は次のとおりです
3