AWK 浮点数加法运算的结果如何依旧为浮点数

Bash 脚本 osetc 2201℃ 0评论

在我这样的一个需求:通过awk从一个文本文件中过滤出包含“gor”字符串的行,并计算出每行中第二个字段(浮点数)的累加和。当执行完awk后,得到的结果却是四舍五入后的整数,而我们期望的结果是浮点数值,类似于345.33,不是345.
awk 命令如下:
grep ‘gor’ try.txt | awk ‘BEGIN{ sum=0.0}{ sub(“,”,””,$2); sum +=$2}END{ print “$” sum}’
$345

那么我们才能得到想要的345.33这样的浮点数值输出呢?
awk 默认情况下会以双精度浮点数来表示所有的数值。换句话说,所有的数在awk里皆浮点数,所有的算数操作都以浮点数来进行。

示例:AWK 浮点运算

这个的例子将会使用一个叫try.txt的文件,该文件包含了一些数值。

1
2
3
4
5
d1 18.2 14.2
d2 11.5 6.60
d3 4.5  4.30
d4 2.5 17.5
d5 3    5

下面的awk脚本将会计算第二字段和第三个字段的总和

1
awk '{ sum = $2 + $3; print $1, sum }' try.txt

脚本输出结果:

1
2
3
4
5
d1 32.4
d2 18.1
d3 8.8
d4 20
d5 8

awk对每个字段求平均值

1
awk '{ sum = $2 + $3; avg = sum/2; print $1, sum , avg}' try.txt

输出结果:

1
2
3
4
5
d1 32.4 16.2
d2 18.1 9.05
d3 8.8 4.4
d4 20 10
d5 8 4

 

输出内容格式化
在awk中我们可以类似于C语言中的printf,这样可以输出更好看更有意义的结果

1
awk '{ sum = $2 + $3 ; avg = sum/4; printf "%s: $%.2f ($%05.2f)n",$1, sum, avg}' try.txt

输出结果:

1
2
3
4
5
d1: $32.40 ($08.10)
d2: $18.10 ($04.53)
d3: $8.80 ($02.20)
d4: $20.00 ($05.00)
d5: $8.00 ($02.00)

回到刚开始的问题,我们可以用下面的awk命令来替换之前的命令:

1
grep 'gor' testing.txt  | awk 'BEGIN{ sum=0.0}{ sub(",","",$2); sum +=$2}END{printf "$%.2fn", sum}'

推荐阅读:
.更多信息可参考awk命令man帮助

转载请注明:osetc.com » AWK 浮点数加法运算的结果如何依旧为浮点数

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址