我正在检查来自主机的 ping 连接检查,这将 ssh 到另一个跳转主机并执行 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