web-dev-qa-db-ja.com

ヘッダー以外の列の値を合計する

以下のようなファイルがあります

--------------------------------------------------------------
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

ファイルのヘッダーを無視してItem_Amount列の下に値を追加し、合計を次のように出力する必要があります

Total Amount collected = 95657
9
Ram
awk '{s+=$3}END{print s}' yourfile
14
coffeMug

awkだけを使用すると、かなり簡単です。サンプルデータがファイル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

細部

awkを使用して、3番目の列($3)とそれらの小計を変数totalに累積します。完了したら、最後に行うこととして、END{..}、変数totalの値とともにメッセージを出力します。

5
slm
total=0; 
for n in  $( tail -n +4 /tmp/reports.txt | awk '{print $3}') ; 
do 
   total=$( expr $total + $n ); 
done ; 
echo ">>$total" 
2
jose

awkアプローチがおそらく最も簡単です。その他の選択肢は次のとおりです。

Perl:

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

純粋なcoreutils:

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
2
terdon

それが役立つ場合:

grep -Eo '[0-9\.]+' your_file|tr '\n' '+'|sed 's/\+$//'|bc -l
2
K-mel

このパイプラインは作業を行う必要があります:

tail -n +4 the_file | awk '{ sum += $3 } END { printf "Total Amount collected = %d\n", sum }'
0
user13742