Localization gawk浮点数本地化

Localization gawk浮点数本地化,localization,awk,gawk,Localization,Awk,Gawk,我希望gawk使用逗号,作为小数点字符来解析数字。 因此,我将LC\u NUMERIC设置为fr\u fr.utf-8,但它不起作用: echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk '{printf ("%.2f\n", $1 + 0) }' 123.00 解决方案是指定选项--posix或export POSIXLY_CORRECT=1,但在这种情况下,GNU awk扩展不可用,例如delete或gensub功能: echo 123,2 | LC_NUME

我希望gawk使用逗号
作为小数点字符来解析数字。 因此,我将
LC\u NUMERIC
设置为
fr\u fr.utf-8
,但它不起作用:

echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk '{printf ("%.2f\n", $1 + 0) }'
123.00
解决方案是指定选项
--posix
export POSIXLY_CORRECT=1
,但在这种情况下,GNU awk扩展不可用,例如
delete
gensub
功能:

echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk --posix '{printf ("%.2f\n", $1 + 0) }'
123,20
是否可以在不指定的情况下,将带有
的gawk解析号作为小数点
POSIX选项?

您正在寻找的选项是:

--使用lc数字

这迫使gawk在解析输入数据时使用区域设置的小数点字符。尽管POSIX标准要求这样做 行为,而gawk在--posix生效时执行此操作,默认值为 遵循传统行为并使用句点作为小数点 点,即使在句点不是小数点的区域设置中也是如此 性格此选项将覆盖默认行为,而不包含 完全严格的--posix选项

演示:

$ echo 123,2 | LC_NUMERIC=fr_FR.utf-8 awk --use-lc-numeric '{printf "%.2f\n",$1}'
123,20
注意:
printf
语句不是函数,因此不需要括号,我不知道为什么要在此处添加零?

“+0”是为了强制从字符串转换为数字。。。但这里不是必需的,我想printf无论如何都会将$1格式化为一个数字。