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
假定第一列已排序。
我有一个看起来像这样的文件:
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
假定第一列已排序。