Unix管道“AWK” - 匹配时的总和

时间:2014-03-17 16:16:11

标签: unix awk pipeline

下面我有一些原始数据。我的目标是匹配“第一列”值,并在每个IP地址的单行输出中包含总字节数。 例如输出:

81.220.49.127 6654
81.226.10.238 328
81.227.128.93 84700

原始数据:

81.220.49.127 328
81.220.49.127 328
81.220.49.127 329
81.220.49.127 367
81.220.49.127 5302
81.226.10.238 328
81.227.128.93 84700

任何人都可以告诉我如何做到这一点。

1 个答案:

答案 0 :(得分:4)

使用关联数组

awk '{a[$1]+=$2}END{for (i in a){print i,a[i]}}'  infile

替代保留订单

 awk '!($1 in a){b[++cont]=$1}{a[$1]+=$2}END{for (c=1;c<=cont;c++){print b[c],a[b[c]]}}' infile

数组的另一种方式

awk 'lip != $1 && lip != ""{print lip,sum;sum=0}
     {sum+=$NF;lip=$1}
     END{print lip,sum}' infile

<强>结果

81.220.49.127 6654
81.226.10.238 328
81.227.128.93 84700