2013-03-15 73 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