Tente:
awk -F, '{a[$2]+=$5};END{for(i in a)print i","a[i]}' <file
Uma observação de que a travessia de matriz no POSIX awk é uma ordem não especificada .
Considerando o arquivo abaixo:
0,2,,,10
0,2,,,15
0,1,,,984
0,2,,,9
1,14,,,5
Usando awk
, preciso calcular o valor total em $5
por cada $2
.
O resultado desejado ficaria abaixo:
2,34
1,984
14,5
Tente:
awk -F, '{a[$2]+=$5};END{for(i in a)print i","a[i]}' <file
Uma observação de que a travessia de matriz no POSIX awk é uma ordem não especificada .
Com gnu
datamash
:
datamash -t ',' -s -g 2 sum 5 <infile
a saída será classificada pela segunda coluna:
1,984
14,5
2,34
Eu ficaria tentado a usar o 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";
}
Você pode condensar isso em um único liner, se necessário.
Tags text-processing awk