Adição de valores

1

foo.txt :

Lillypaul_sg
204803
204803
204803
Ammy_sg
3
ramaswamy_sg
3
33
tommy_sg
3
3
137374
100

Desejado Out.txt :

Lillypaul_sg
614409
Ammy_sg
3
ramaswamy_sg
36
tommy_sg
137480

A saída é uma soma de valores no arquivo de entrada. Os cabeçalhos podem conter valores alfanuméricos, mas sempre terminam com "_sg".

    
por ayrton_senna 11.06.2015 / 23:47

2 respostas

3
awk '$0 == $0+0{
                summ += $0
                next}
               {
                if(summ)
                    format="%06d\n%s\n"
                else
                    format="%s%s\n"
                printf format, summ, $0
                summ=""}
     END       {
                if(summ)
                    printf "%06d\n", summ}' foo.txt
    
por 12.06.2015 / 00:33
1

Em Perl:

$ perl -lne 'if(/_sg/){print "$n\n$s" if defined($n); $n=$_; $s=0;}
             else{$s+=$_}END{print "$n\n$s"}' file 
Lillypaul_sg
614409
Ammy_sg
3
ramaswamy_sg
36
tommy_sg
137480

Se você quiser que os números sejam preenchidos com 0 se tiverem menos de 6 dígitos (como na pergunta original):

$ perl -lne 'if(/_sg/){printf "%s\n%0.6d\n",$n,$s if defined($n); $n=$_; $s=0;}
             else{$s+=$_}END{printf "%s\n%0.6d\n",$n,$s}' file 
    
por 12.06.2015 / 00:33