2013-03-15 63 views
1

我有以下列数据,其列为IPPORTBytes。我想根据类似的IPPort总字节数。所以PortIP's是总字节相同,然后在最后根据bytesports排序,所以最终我可以得到排名前012位的port排名前10位的谈话者bytes汇总类似字段的Bash脚本

与80端口上发送器下面的数据

因此将是:

174.143.121.217 80 30722 
109.108.151.126 80 25083 

然后使用端口5989上讲话者是:

192.168.23.20 5989 26601 

文件:

208.76.128.67 443 2975 
204.154.110.99 80 1713 
130.117.119.220 80 845 
192.168.23.20 5989 26601 
23.15.8.35 80 33944 
64.69.6.116 443 5936 
208.76.128.67 443 2309 
66.129.120.117 80 1514 
208.76.128.67 443 4143 
109.108.151.126 80 3589 
109.108.151.126 80 21494 
174.143.121.217 80 30722 
173.45.233.170 80 2218 
66.235.155.28 80 4367 
64.94.107.50 80 1236 
76.13.114.90 80 534 

回答

1

With awksort and column -t for nice table for乱蓬蓬的输出继电器:

awk '{a[$1" "$2]=a[$1" "$2]+$3}END{for(k in a) print k,a[k]}' file | 
> sort -nk2 -rnk3 | 
> column -t 
192.168.23.20 5989 26601 
208.76.128.67 443 9427 
64.69.6.116  443 5936 
23.15.8.35  80 33944 
174.143.121.217 80 30722 
109.108.151.126 80 25083 
66.235.155.28 80 4367 
173.45.233.170 80 2218 
204.154.110.99 80 1713 
66.129.120.117 80 1514 
64.94.107.50  80 1236 
130.117.119.220 80 845 
76.13.114.90  80 534 

编辑

要限制每个端口你可以管的顶部10至awk 'c[$2]++<10'。演示(限制顶部4)

$ awk '{a[$1" "$2]=a[$1" "$2]+$3}END{for(k in a) print k,a[k]}' file | 
> sort -nk2 -rnk3 | 
> column -t | 
> awk 'c[$2]++<4' 
192.168.23.20 5989 26601 
208.76.128.67 443 9427 
64.69.6.116  443 5936 
23.15.8.35  80 33944 
174.143.121.217 80 30722 
109.108.151.126 80 25083 
66.235.155.28 80 4367 
+0

正确...... 我只是“输入一次”:P – anishsane 2013-03-15 13:39:03

+0

谢谢......我不得不编辑自己的帖子,因为我也期待基于组然后根据字节进行排序...所以我可以确定80端口的前10位,然后按字节排序到最小,然后移到下一个端口443(排名前10位),排序最大到最小,等等。 。 – 2013-03-15 13:41:57

+0

@ user2124772请参阅编辑。 – 2013-03-15 14:07:07