1

我有以下数据,按列是IP,PORTBytes。我想基于相似的字节总数IPPort. 所以字节总数在哪里PortIP's是相同的,然后最后根据排序bytesports所以最后我可以得到每个port排序的前 10 个谈话者bytes

因此,对于端口 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
4

1 回答 1

1

使用awk,sortcolumn -t一个漂亮的表格格式输出:

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
于 2013-03-15T13:37:10.310 回答