Awk - 基于susbtring

时间:2016-04-21 10:54:10

标签: awk sum field line

我有一个看起来像的文件:

100001001 0 130
100001001 0 610
100001001 0 210
100001001 0 100
100001001 1  80
100001002 0 300
100001002 0 200
100001002 0 100
100001003 0 200
100001003 0 100
100001004 1  50

我想为每个相同的第一个字段求​​和第三个字段,并在第二个字段中排除此总数中包含1的行,输出如下:

100001001 1050
100001002  600
100001003  300

到目前为止,我工作过的命令似乎没有用于某种原因,有人可以帮助我吗?

awk ' $2 != 1 { sum[$1] += $3 }' 

2 个答案:

答案 0 :(得分:3)

这个单行应该有所帮助:

 awk '$2!=1{a[$1]+=$3}END{for(x in a)print x, a[x]}' file

代码中的问题是,在数组中求和之后没有打印输出。

答案 1 :(得分:1)

尝试这个经过测试的人:

awk '{ if (NR==1) {sum=0} else if (lastid!=$1) {printf("%s %s\n", lastid, sum); sum=0} if ($2!=1) {sum+=$3} lastid=$1} END{if (sum>0) print lastid, sum}' afile

假设第一列已排序。