Soma os valores em uma coluna, exceto o cabeçalho

6

Eu tenho um arquivo como abaixo:

--------------------------------------------------------------
Name_Customer   Item_Purchased  Item_Amount Credit
--------------------------------------------------------------
Tom              H1_P            7657        N/A    
Pras             Track_1         23          N/A
Cha              Brace           9           N/A
Moh              kite37          269         N/A
Prab             Bols            87699       N/A

Eu preciso adicionar os valores abaixo da coluna Item_Amount , ignorando o cabeçalho no arquivo e imprimindo a soma como

Total Amount collected = 95657
    
por Ram 14.10.2013 / 21:29

6 respostas

9
awk '{s+=$3}END{print s}' yourfile
    
por 14.10.2013 / 21:39
4

Bastante trivial usando apenas awk . Supondo que os dados do exemplo estejam em um arquivo, ex.txt :

$ awk '{total = total + int($3)}END{print "Total Amount collected = "total}' ex.txt

Exemplo

$ awk '{total = total + $3}END{print "Total Amount collected = "total}' ex.txt 
Total Amount collected = 95657

Detalhes

Usando awk , coletamos os valores da terceira coluna ( $3 ) e acumulamos o sub-total deles na variável total . Uma vez concluído, como a última coisa a fazer, END{..} , imprimimos a mensagem junto com o valor da variável total .

    
por 15.10.2013 / 08:39
1

A abordagem awk é provavelmente a mais fácil. Aqui estão algumas outras opções:

Perl:

perl -lane '$k+=$F[2];END{print $k}' foo.txt

Coreutils puros:

t=0; tail -n +4 foo.txt | tr -s ' ' '\t' | cut -d $'\t' -f 3 | 
 while read i; do let t+=$i; echo $t; done  | tail -n 1
    
por 14.10.2013 / 21:50
0
total=0; 
for n in  $( tail -n +4 /tmp/reports.txt | awk '{print $3}') ; 
do 
   total=$( expr $total + $n ); 
done ; 
echo ">>$total" 
    
por 14.10.2013 / 21:44
0

Este canal deve fazer o trabalho:

tail -n +4 the_file | awk '{ sum += $3 } END { printf "Total Amount collected = %d\n", sum }'
    
por 15.10.2013 / 00:29
-1

Se puder ajudar:

grep -Eo '[0-9\.]+' your_file|tr '\n' '+'|sed 's/\+$//'|bc -l
    
por 04.04.2018 / 16:53