bash awk从一个数字col中提取和求和值

时间:2016-05-28 15:42:42

标签: bash awk

我在文件中有一些数据:

function addOrder(name, price){
 alert(name + " 's price is " + price);

 // do stuffs with server side values

}

我想总结一个col的浮点值,我提取列:

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

注意:这里有一个类似的问题:Why does AWK refuse to sum up floats但在我的文件中浮点数并不是唯一的。 我在管道后面寻找一个额外的衬管。

2 个答案:

答案 0 :(得分:5)

  

我想总结一个col的浮点值

惯用的方式

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之类的内容。

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

答案 1 :(得分:0)

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

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

它以累积方式给出4美元的总和

编辑: - 要一次性获得第4列中所有值的总和: -

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