unix awk 匹配字符串并执行定界

unix awk 匹配字符串并执行定界

我正在检查来自主机的 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 receivedReceived = 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

相关内容