Localization gawk浮点数本地化

Localization gawk浮点数本地化,localization,awk,gawk,Localization,Awk,Gawk,我希望gawk使用逗号作为小数点字符来解析数字。 因此,我将LC_NUMERIC设置为fr_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

我希望gawk使用逗号作为小数点字符来解析数字。 因此,我将LC_NUMERIC设置为fr_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选项

演示:


注意:printf语句不是函数,因此不需要括号,我不知道为什么在这里添加零?

0是为了强制从字符串转换为数字。。。但这里不是必需的,我想printf无论如何都会将$1格式化为一个数字。
$ echo 123,2 | LC_NUMERIC=fr_FR.utf-8 awk --use-lc-numeric '{printf "%.2f\n",$1}'
123,20