0

以下是 ping 2 url 的输出。

PING www.abc.com (96.126.98.69):56 个数据字节
来自 96.126.98.69 的 64 个字节:icmp_seq=0 ttl=43 time=444.812 ms
来自 96.126.98.69 的 64 个字节:icmp_seq=1 ttl=43 time=467.554 ms

--- www.abc.com ping 统计 ---
发送 2 个数据包,接收 2 个数据包,0.0% 数据包丢失
往返 min/avg/max/stddev = 444.812/456.183/467.554/11.371 ms
PING www.kkk.com (90.187.36.10):56 个数据字节
来自 90.187.36.10 的 64 个字节:icmp_seq=0 ttl=51 time=404.907 ms
来自 90.187.36.10 的 64 个字节:icmp_seq=1 ttl=51 time=427.510 ms

--- www.kkk.com ping 统计 ---
发送 2 个数据包,接收 2 个数据包,0.0% 数据包丢失
往返 min/avg/max/stddev = 404.907/416.208/427.510/11.302 ms

我想得到每个ip的时间算术值。喜欢

96.126.98.69 a_time = 456.183
90.187.36.10 a_time = 416.208

我可以使用以下代码随时间获取每个 ip:

cat out | grep "64 bytes"

但我不知道如何获得每个 ip 的算术平均值。

4

2 回答 2

0

尝试这样做:

num=2
cat ips |
xargs -n1 ping -c $num |
awk -vnum=$num -F'[ =:]' '
    /^[0-9]+ bytes +from/{
        ips[$4]+=$11
    }
    END{
        for (ip in ips) print ip, "a_time =", ips[ip]/num
    }
'

输出示例

127.0.0.1 a_time = 0.0225
8.8.8.8 a_time = 25.7

解释

  • 我使用将毫秒添加到以 ip 为键的数组中
  • @最后,我遍历数组并除以 num 变量整数(此处为 2)
  • 我用空格=和开关分割列 :-F
于 2013-01-21T14:09:49.410 回答
0

awk一个班轮怎么样:

awk -F'[:= ]' '/^64 b/{a[$4]+=$11}END{for(k in a)print k,"a_time =",a[k]/2}' out
90.187.36.10 a_time = 416.208
96.126.98.69 a_time = 456.183

如果您增加数据包的数量,ping -c 2然后ping -c 5将最后一个更改a[k]/2a[k]/5可选,您可以使用该awk选项-v将值作为变量传递。

于 2013-01-21T14:29:56.760 回答