awk '{s+=$3}END{print s}' yourfile
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
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
$ awk '{total = total + $3}END{print "Total Amount collected = "total}' ex.txt
Total Amount collected = 95657
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
.
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
total=0;
for n in $( tail -n +4 /tmp/reports.txt | awk '{print $3}') ;
do
total=$( expr $total + $n );
done ;
echo ">>$total"
Este canal deve fazer o trabalho:
tail -n +4 the_file | awk '{ sum += $3 } END { printf "Total Amount collected = %d\n", sum }'
Se puder ajudar:
grep -Eo '[0-9\.]+' your_file|tr '\n' '+'|sed 's/\+$//'|bc -l
Tags text-processing ksh columns