2016-05-28 68 views
1

我在一個文件中的一些數據:的bash AWK提取物和總和值

$ cat data.txt 
facture-2817806.txt Total TTC 27.11 € 
facture-2857125.txt Total TTC 37.92 € 
facture-2895824.txt Total TTC 43.61 € 
facture-2922275.txt Total TTC 46.73 € 
facture-2935969.txt Total TTC 8.29 € 
facture-2977623.txt Total TTC 41.79 € 
facture-3005553.txt Total TTC 46.18 € 
facture-3020047.txt Total TTC 20.34 € 
facture-3061124.txt Total TTC 28.22 € 
facture-3097529.txt Total TTC 59.65 € 
facture-3258989.txt Total TTC 29.31 € 
facture-3637195.txt Total TTC 11.17 € 
facture-3681794.txt Total TTC 44.52 € 
facture-3726992.txt Total TTC 28.20 € 
facture-3752273.txt Total TTC 42.15 € 
facture-3770970.txt Total TTC 24.01 € 

我要總結一個關口的浮點值,我提取柱:

$ cat data.txt | awk '{print $4}' 
27.11 
37.92 
43.61 
46.73 
8.29 
41.79 
46.18 
20.34 
28.22 
59.65 
29.31 
11.17 
44.52 
28.20 
42.15 
24.01 
$ 

什麼是一個好的bash方式來獲得多一個管道的總和'|' ?

​​

注意:有一個類似的問題在這裏:Why does AWK refuse to sum up floats但在我的文件浮點數並不孤單。 我在管子後面尋找一個額外的襯墊。

回答

5

我要總結一個山坳

的慣用方式

awk '{count+=$4}END{printf "Total : %f\n",count}' your_file 

難的方法的浮點值

awk 'BEGIN{count=0}{count+=$4}END{printf "Total : %f\n",count}' your_file 

請注意,如果您希望指定小數點後的位數,請使用類似%0.2f的東西。

注意:你根本不需要管道。

+0

感謝,非常優雅,只是爲了更好地理解爲什麼這不起作用?:$ cat data.txt | awk'{print $ 4}'| awk'{s + = $ 1} END {printf「總計:%f \ n」,$ s}' 合計:0.000000 – user3313834

+1

@ user3313834關於此問題:使用** s ** not ** $ s **作爲參數的printf。 –

+0

@LarsFischer:謝謝,剛纔提到這一點。 :-) – sjsam

0

可能與awk,但以不同的方式: -

awk '{ sum += $4;printf "$%.2f\n",sum}' data.txt 

它給$ 4總和累積方式

編輯: - 要獲得所有從列$ 4的值的總和一個鏡頭: -

awk '{ sum += $4} END {printf "$%.2f\n",sum}' data.txt 
+0

這將在每次迭代中打印總和,如果文件很大,可能會導致性能問題。 – daemon12

+0

@ daemon12 - 增加一次性獲得總和的方法。 – syadav