列 2 の同じフィールドに対応する列 5 の合計値

列 2 の同じフィールドに対応する列 5 の合計値

次のファイルを検討してください。

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

出力は2番目の列に基づいてソートされます。

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";
}

必要に応じてこれを1行に圧縮できます。

関連情報