如何在底部按平均时间(仅打印ip和平均时间)对ip列表进行排名和排名结果

时间:2019-05-31 13:39:16

标签: bash

我有一个IP列表文件:iplistALL.txt

我要ping该列表中的所有ip并输出一个取名为neip的文件:iplistAVGT.txt

在iplistAVGT.txt内部,我只列出所有ping的ip和平均ping,每条ip均按平均时间从低到高的顺序排在一行上,并在最后超时。

请使用bash。

到目前为止,我做到了:

for i in `cat iplistALL.txt` ; do ping -c1 $i 2>&1 | tee >> ping-output.txt; done

但是我得到的信息太多了,我只想在一条线上输入ip和时间。也由于某种原因,最后一个被截断。而且它们没有按时间顺序列出

1 个答案:

答案 0 :(得分:0)

假设您的ping-output.txt如下所示:

PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=49 time=110.183 ms
--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 110.183/110.183/110.183/0.000 ms
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=48 time=106.966 ms

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 106.966/106.966/106.966/0.000 ms

您可以使用awk来选择IP和平均往返时间,如下所示:

awk ' 
/ping statistics/ { 
  ip=$2
}  
 /round-trip/ { 
  split( $4, array, "/" ) 
  print ip,array[2]
}' ping-output.txt 

产生:

10.0.0.1 110.183
10.0.0.2 106.966