【问题标题】:Bash script aggregating similar fields聚合相似字段的 Bash 脚本
【发布时间】:2013-03-15 13:32:40
【问题描述】:

我有以下数据,按列是IPPORTBytes。我想根据类似的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

【问题讨论】:

    标签: bash sorting count awk aggregate


    【解决方案1】:

    使用awksortcolumn -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'。 Demo(限前 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
    

    【讨论】:

    • 谢谢...我不得不编辑我的帖子,因为我还希望根据端口进行分组,然后根据字节进行排序...所以我可以确定端口 80 的前 10 个谈话者,然后进行排序按字节从大到小,然后移动到下一个端口 443(前 10 个通话者),从大到小排序,依此类推...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多