Awk - 根据子字符串对特定行的字段求和

Awk - Sum fields of specific lines based on susbtring

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

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 '  != 1 { sum[] +=  }' 

这一行应该有所帮助:

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

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

试试这个经过测试的:

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

假定第一列已排序。