我正在尝试创建将ping到远程服务器并仅显示的脚本1) %丢包量2)平均往返延迟(ms
)为丢包创建了line
`ping -c 3 -s 14 x.x.x.x|grep packet|awk '{print $7}'|cut -d'%' -f1`
只给出丢包,
我的问题开始时,IP是不可达的输出线路变化因此我不能同时捕获
作为参考,我显示了两个场景的输出
`/pefmephbir >ping -c 3 -s 14 10.9.50.225`
PING 10.9.50.225 (10.9.50.225): 14 data bytes
--- 10.9.50.225 ping statistics ---
**3 packets transmitted, 0 packets received, 100% packet loss**
`/pefmephbir >ping -c 3 -s 14 10.9.50.220`
PING 10.9.50.220 (10.9.50.220): 14 data bytes
22 bytes from 10.9.50.220: icmp_seq=0 ttl=63 time=0 ms
22 bytes from 10.9.50.220: icmp_seq=1 ttl=63 time=0 ms
22 bytes from 10.9.50.220: icmp_seq=2 ttl=63 time=0 ms
--- 10.9.50.220 ping statistics ---
**3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0/0/0 ms**
希望有专门编写脚本的人可以帮助我
TIA
试试这个:
ping ... | awk '/packet loss/{x="Loss:" $7} /round-trip/{x="Trip:" $4} END{print x}'
如果它看到一行"packet loss",它创建一个字符串x
,其中包含丢包百分比。如果它看到带有"round-trip"的行,它将用往返时间覆盖字符串x
。最后,它输出x
所设置的字符串。
考虑到你的意见……
awk '/packet loss/ && /100/{x="Loss: " $7} /round-trip/{split($4,a,///);x="Ave: " a[2]} END{print x}'
所以,现在"packet loss"行在我们拾取它之前必须包含"100"。"往返"行的第4个字段以/
作为分隔符分割成一个数组a[]
,然后我们将a[]
的第二个元素作为平均值并存储在我们的输出字符串x
中。
使用sed:
ping ... | sed -n -e 's/.*(100% packet loss).*/1/p'
-e 's_.*min/avg/max = [0-9]*/([0-9]*)/[0-9]*.*_1_p'