Soma valores na quinta coluna que correspondem ao mesmo campo na segunda coluna

2

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
    
por Eng7 09.08.2015 / 15:21

3 respostas

4

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 .

    
por 09.08.2015 / 16:00
2

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
    
por 26.09.2015 / 15:03
1

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.

    
por 09.08.2015 / 17:43