如何在awk脚本中将lang env设置为“en_US.UTF-8”?

时间:2014-10-17 06:29:43

标签: awk gawk

我正在使用awkc从awk脚本生成可执行文件。我在awk脚本中有以下行abc.awk:

BEGIN{printf "Value=%s\n",(3.13+3.26)}

我已经生成了一个可执行文件(abc.exe),我已经在不同的系统上执行了该文件。它在浮点运算中提供不同的输出。

在一个本地系统上,它提供输出6.39,但它在另一个位于不同时区的系统上提供输出6

当我在各个站点搜索时,我能够看到设置LANG环境变量,但是如何?

2 个答案:

答案 0 :(得分:0)

我不确定这与您的不同系统上的区域设置有关,但如果您要查找浮点数,则应使用"%f"格式说明符。要获得2位小数的答案,请使用"%.2f"

BEGIN{printf "Value=%.2f\n",(3.13+3.26)}

无论运行何种系统,都应该得到相同的结果。

根据链接的问题

修改,也许您应该尝试使用LC_NUMERIC=C来明确设置区域设置:

LC_NUMERIC=C awk 'BEGIN{printf "Value=%.2f\n",(3.13+3.26)}'
无论运行什么系统,

都应该有效。

答案 1 :(得分:0)

如果将程序交给其他人,环境变量通常是您无法控制的。我会在你的printf - 电话中考虑更具体。您可以将数字格式化为字符串,以达到令人惊讶的细节。您可能正在寻找float%f)(您现在正在使用string%s)。

如果您注意到printf - 调用始终使用相同的技巧,则可以在BEGIN块中使用变量CONVFMT控制数字到字符串的转换设置。我通过gawk介绍了这个,显然它是在POSIX标准中。我不知道awkc是否支持这一点。

来自gawk manual

  

此字符串控制数字到字符串的转换(请参阅   转换)。它通过实际上作为第一个传递   sprintf()函数的参数(参见字符串函数)。它的默认值   值为“%。6g”。 CONVFMT由POSIX标准引入。