我正在尝试创建将ping到远程服务器并仅显示的脚本 1)%丢包率 2)以ms为单位的平均往返延迟
用于数据包丢失我创建了行
`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
答案 0 :(得分:2)
试试这个:
ping ... | awk '/packet loss/{x="Loss:" $7} /round-trip/{x="Trip:" $4} END{print x}'
如果它看到一行"丢包"在其中,它创建一个包含丢包百分比的字符串x
。如果它看到一条带有"往返的行#34;它用往返时间覆盖字符串x
。最后,它会打印设置为x
的字符串。
根据你的评论...
awk '/packet loss/ && /100/{x="Loss: " $7} /round-trip/{split($4,a,/\//);x="Ave: " a[2]} END{print x}'
所以,现在"数据包丢失" line还必须包含" 100"在我们拿起它之前。 "往返的第四个领域"使用a[]
作为分隔符将行拆分为数组/
,然后我们将a[]
的第二个元素作为平均值并将其存储在输出字符串x
中。
答案 1 :(得分:2)
使用sed:
ping ... | sed -n -e 's/.*\(100% packet loss\).*/\1/p' \
-e 's_.*min/avg/max = [0-9]*/\([0-9]*\)/[0-9]*.*_\1_p'