[英]AWK sum all values of a column keeping all floats
我正在使用以下代码grep我感兴趣的行,仅保留最后一行,并对第九列求和:
grep -n -49 'FINAL BlaBla' output |tail -9 | awk 'BEGIN {SUM=0}; {SUM=SUM+$9}; END {printf "%.3f\n" SUM}.
但是,第9列的总和返回0,000
选定的行如下所示
84- C -3.42056726 +1 -0.82831327 +1 1.52743549 +1 0.5647
85- N -4.78612760 +1 -1.01185554 +1 1.58894854 +1 -0.5837
86- C -5.19047197 +1 -2.20130686 +1 2.06176295 +1 0.3890
87- N -4.42537785 +1 -3.22689397 +1 2.47304603 +1 -0.4775
88- C -3.03532546 +1 -2.98933854 +1 2.38795560 +1 0.3686
89- N -2.51737448 +1 -1.78267672 +1 1.92262528 +1 -0.5526
90- Cl -6.86455806 +1 -2.45050886 +1 2.15229544 +1 0.0934
91- N -2.24043582 +1 -3.93651444 +1 2.76082642 +1 0.0890
92- N -2.94053526 +1 0.36941710 +1 1.06455738 +1 -0.3274
我找不到错误在哪里。
我也试图求和超过1美元,我正确地获得了792,000,但是当我超过3美元时,我得到了31,000 ...
怎么了?
我认为问题出在printf
表达式中缺少逗号:
$ awk 'BEGIN {SUM=0}; {SUM=SUM+$9}; END {printf "%.3f\n", SUM}' file
# ^
# comma!
-0.436
顺便说明一下,由于这是默认设置,因此无需将变量设置为零。 因此,删除BEGIN {}
块,然后只剩下:
awk '{sum+=$9}; END {printf "%.3f\n", sum}' file
对于其他字段:
$ awk '{sum+=$nvar}; END {printf "%.3f\n", sum}' nvar=1 file
792.000
$ awk '{sum+=$nvar}; END {printf "%.3f\n", sum}' nvar=3 file
-35.421
$ awk '{sum+=$nvar}; END {printf "%.3f\n", sum}' nvar=9 file
-0.436
从GNU Awk用户指南5.5.1 printf语句简介 :
一个简单的printf语句如下所示:
printf format, item1, item2, …
对于打印,整个参数列表可以选择用括号括起来
printf和print之间的区别是format参数。 这是一个表达式,其值作为字符串使用; 它指定如何输出其他每个参数。 它称为格式字符串。
格式字符串与ISO C库函数printf()中的格式字符串非常相似。 大部分格式是要逐字输出的文本。 文本中散布着格式说明符,即每一项。 每个格式说明符都说要在格式中该位置输出参数列表中的下一项。
因此,如果不使用逗号来调用字段,则会出现此错误:
$ awk 'BEGIN {printf "%.3f" 3}'
awk: cmd. line:1: fatal: not enough arguments to satisfy format string
`%.3f3'
^ ran out for this one
使用它们就可以了!
$ awk 'BEGIN {printf "%.3f", 3}'
3.000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.