如何使awk在打印小值时不使用科学符号?

如何使awk在打印小值时不使用科学符号?,awk,Awk,在下面的awk命令中 awk '{sum+=$1; ++n} END {avg=sum/n; print "Avg monitoring time = "avg}' file.txt 我应该更改什么以删除科学符号输出(非常小的值显示为1.5e-05) 我无法成功使用OMFT变量。您应该使用。这样,您可以指定填充、精度等。在您的情况下,似乎更合适。我无法成功使用OMFT变量 它实际上是Mt(o输出f或mat),例如: awk 'BEGIN{OFMT="%f";print 0

在下面的awk命令中

 awk '{sum+=$1; ++n} END {avg=sum/n; print "Avg monitoring time = "avg}' file.txt
我应该更改什么以删除科学符号输出(非常小的值显示为1.5e-05)

我无法成功使用OMFT变量。

您应该使用。这样,您可以指定填充、精度等。在您的情况下,似乎更合适。

我无法成功使用OMFT变量

它实际上是Mt(o输出fmat),例如:

awk 'BEGIN{OFMT="%f";print 0.000015}'
将输出:

0.000015
与之相反:

awk 'BEGIN{print 0.000015}'
哪个输出:

1.5e-05

表示如果您想要兼容POSIX,它应该是浮点转换规范。

设置
-v of mt='%f'
(无需将其嵌入我的awk语句中)对于我来说非常有效,因为我只想从awk获得任意浮点数列的总和

正如OP所发现的,awk用非常小的数字产生指数表示法

$some_accounting_widget | awk'{sum+=$0}END{print sum+0}'
8.992e-07#对我没用
设置mt修复了这一问题,但舍入太过激进

$some_accounting_widget | awk-v of mt='%f'{sum+=$0}END{print sum+0}'
0.000001#哎呀。四舍五入过多。%默认情况下,f四舍五入到小数点后6位。
指定小数位数可以满足我的需要

$some_accounting_widget | awk-v of mt='%.10f'{sum+=$0}END{print sum+0}
0.0000008992#完美。

对于那些不经常使用awk而忘记语法的人,这里有一个例子:
echo“|awk”{printf“%.2f”,156666666/50}”
还要注意,即使是对整数求和,@AaronR。如果您不需要
awk
接受任何输入,您可以使用
awk'BEGIN{printf“%.2f”,1566666/50}'
来使用您的示例。默认选择器是标准输入的
$0
,在运行之前等待标准输入中的换行符,但
开始
不等待标准输入中的任何内容。另外,为了只输出一个换行符,您只需执行
echo
,而不需要
echo”“
。您可以使用例如
awk'{print sprintf(%.10f',$1/$2),$2}'