3

我希望 gawk 使用逗号,作为小数点字符来解析数字。所以我设置LC_NUMERICfr_FR.utf-8但它不起作用:

echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk '{printf ("%.2f\n", $1 + 0) }'
123.00

解决方案是指定选项--posixexport POSIXLY_CORRECT=1但在这种情况下,GNU awk 扩展不可用,例如deletegensub函数:

echo 123,2 | LC_NUMERIC=fr_FR.utf-8 gawk --posix '{printf ("%.2f\n", $1 + 0) }'
123,20

是否可以在不指定 POSIX 选项的情况下将 gawk 解析数字,作为小数点?

4

1 回答 1

3

您正在寻找的选项是:

--使用-lc-numeric

这会强制 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语句不是函数,所以不需要括号,我不确定你为什么在这里加零?

于 2013-05-30T09:32:52.603 回答