如何使awk在打印小值时不使用科学符号?
在下面的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 '{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.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}'