如何删除awk中的科学记数法?

时间:2012-10-03 17:58:49

标签: awk

在以下awk命令中

 awk '{sum+=$1; ++n} END {avg=sum/n; print "Avg monitoring time = "avg}' file.txt

我应该更改什么来删除科学记数法输出(非常小的值显示为1.5e-05)?

我无法使用OMFT变量成功。

3 个答案:

答案 0 :(得分:38)

您应该使用printf AWK statement。这样你可以指定填充,精度等。在你的情况下,%f control letter似乎更合适。

答案 1 :(得分:3)

我无法成功使用OMFT变量。

实际上是OFMT o utput f m a t ),因此例如:

awk 'BEGIN{OFMT="%f";print 0.000015}'

将输出:

0.000015

相对于:

awk 'BEGIN{print 0.000015}'

哪个输出:

1.5e-05

GNU AWK manual说,如果您想兼容POSIX,则应该是浮点转换规范

答案 2 :(得分:1)

设置 -v OFMT='%f'(无需将其嵌入到我的 awk 语句中)在我想要从 awk 中得到的只是对任意浮点数列求和的情况下对我有用。

正如 OP 发现的那样,awk 产生非常小的数字的指数符号,

$ some_accounting_widget | awk '{sum+=$0} END{print sum+0}'
8.992e-07  # Not useful to me

设置 OFMT 来解决这个问题,但也过于激进,

$ some_accounting_widget | awk -v OFMT='%f' '{sum+=$0} END{print sum+0}'
0.000001   # Oops. Rounded off too much. %f rounds to 6 decimal places by default.

指定小数位数让我得到了我所需要的,

$ some_accounting_widget | awk -v OFMT='%.10f' '{sum+=$0} END{print sum+0}'
0.0000008992    # Perfect.
相关问题