第 5 列中对应于第 2 列中相同字段的总和值

第 5 列中对应于第 2 列中相同字段的总和值

考虑以下文件:

0,2,,,10
0,2,,,15
0,1,,,984
0,2,,,9
1,14,,,5

使用awk,我需要计算$5每个 的总价值$2

所需的输出如下所示:

2,34
1,984
14,5

答案1

尝试:

awk -F, '{a[$2]+=$5};END{for(i in a)print i","a[i]}' <file

需要注意的是POSIX awk 中的数组遍历是未指定的顺序

答案2

gnu datamash:

datamash -t ',' -s -g 2 sum 5 <infile

输出将按第二列排序:

1,984
14,5
2,34

答案3

我很想使用 perl:

#!/usr/bin/env perl
use strict;
use warnings;

my %things;

while (<>) {
    my ( undef, $key, @rest ) = split(/,/);
    $things{$key} += pop(@rest);
}

foreach my $key ( sort { $a <=> $b } keys %things ) {
    print "$key = $things{$key}\n";
}

如果需要的话,你可以将其压缩为一行。

相关内容