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

如何在awk脚本中将lang env设置为“en_US.UTF-8”?,awk,gawk,Awk,Gawk,我正在使用awkc从awk脚本生成一个可执行文件。我在awk脚本abc.awk中有以下行: BEGIN{printf "Value=%s\n",(3.13+3.26)} 我已经生成了一个可执行文件abc.exe,我已经在不同的系统上执行了它。它在浮点运算中提供不同的输出 一个本地系统的输出为6.39,但另一个位于不同时区的系统的输出为6 当我在不同的网站上搜索时,我可以看到如何设置LANG环境变量,但是如何设置?我不确定这是否与不同系统上的语言环境设置有关,但如果要查找浮点数字,则应使用%f格

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

BEGIN{printf "Value=%s\n",(3.13+3.26)}
我已经生成了一个可执行文件abc.exe,我已经在不同的系统上执行了它。它在浮点运算中提供不同的输出

一个本地系统的输出为6.39,但另一个位于不同时区的系统的输出为6


当我在不同的网站上搜索时,我可以看到如何设置LANG环境变量,但是如何设置?

我不确定这是否与不同系统上的语言环境设置有关,但如果要查找浮点数字,则应使用%f格式说明符。要获得小数点后两位的答案,请使用%.2f:

无论在哪个系统上运行,都会得到相同的结果

编辑:根据链接的问题,也许您应该尝试使用LC_NUMERIC=C显式设置语言环境:

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

无论在哪个系统上运行,它都应该工作。

如果将程序移交给其他人,环境变量通常是您无法控制的。我会在你的printf调用中更具体一些。您可以将数字格式化为字符串,以获得惊人的细节。您可能正在查找浮点值%f您现在使用的是字符串%s

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

从:

此字符串控制数字到字符串的转换。请参见 转变实际上,它是通过作为第一个 sprintf函数的参数请参见字符串函数。违约 值为%.6g。CONVFMT是由POSIX标准引入的


这是awk脚本的一部分吗?应该是printf吗?你能用最简单的例子awk“BEGIN{printf Value=%s\n,3.13+3.26}”重现这个问题吗?我已经简要地解释了你的建议。若要添加,我已使用以下命令awkc-o-f生成了exe,您可能想看看这个问题:我已使用%.2f进行了尝试,但结果是Value=6,00,我想知道是否使用逗号而不是。结果呢。我认为语言环境有一定的依赖性。不是吗?它不工作,因为exe由于格式错误而无法生成。但我需要一些通用于所有系统的解决方案。实际上,我的需求是一个动态值,它实际上存储在一些变量中。所以通过调试,我发现了浮点数的问题。因此,我在不同的网站上发现,可以将语言环境LC_ALL或LC_NUMERIC设置为处理数值表达式的某个值。但没有解释如何在脚本中使用它。也许您可以在每个系统上尝试LC_NUMERIC=C abc.exe?您能否更具体地说明如何在命令提示符下执行该命令?我应该使用一些选项来执行它吗?它未在命令提示符下执行。LC_NUMERIC是一个环境变量。您可以在执行程序时将其设置为与我的答案中相同的行,或者在运行程序之前使用export LC_NUMERIC=C。
LC_NUMERIC=C awk 'BEGIN{printf "Value=%.2f\n",(3.13+3.26)}'