我有一个看起来像的文件:
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 }'
答案 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
假设第一列已排序。