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

Man*_*lva 25 awk

在下面的awk命令中

 awk '{sum+=$1; ++n} END {avg=sum/n; print "Avg monitoring time = "avg}' file.txt
Run Code Online (Sandbox Code Playgroud)

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

我无法使用OMFT变量成功.

C2H*_*5OH 42

您应该使用printfAWK语句.这样你可以指定填充,精度等.在你的情况下,%f控制字母似乎更合适.

  • 对于那些不经常使用awk并忘记语法的人,这里有一个例子:`echo""| awk'{printf"%.2f",1566666666/50}'` (18认同)

Daw*_*weo 6

我无法成功使用 OMFT 变量。

它实际上是OFMTo utput fm a t),例如:

awk 'BEGIN{OFMT="%f";print 0.000015}'
Run Code Online (Sandbox Code Playgroud)

将输出:

0.000015
Run Code Online (Sandbox Code Playgroud)

与:

awk 'BEGIN{print 0.000015}'
Run Code Online (Sandbox Code Playgroud)

哪个输出:

1.5e-05
Run Code Online (Sandbox Code Playgroud)

GNU AWK 手册说,如果你想符合 POSIX,它应该是浮点转换规范


Dal*_*son 5

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

正如OP发现的那样,awk产生带有非常小的数字的指数表示法,

$ some_accounting_widget | awk '{sum+=$0} END{print sum+0}'
8.992e-07  # Not useful to me
Run Code Online (Sandbox Code Playgroud)

设置 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.
Run Code Online (Sandbox Code Playgroud)

指定小数位数可以满足我的需要,

$ some_accounting_widget | awk -v OFMT='%.10f' '{sum+=$0} END{print sum+0}'
0.0000008992    # Perfect.
Run Code Online (Sandbox Code Playgroud)