我正在尝试对使用逗号作为分隔符的浮点数求和,而 gawk 进行整数计算。这是脚本:
BEGIN {
FS=";"
OFS=";"
CONVFMT = "%2.2f"
}
{
print $1
print $2
print $1+$2
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这个数据文件:
4,3;5,7
Run Code Online (Sandbox Code Playgroud)
并像这样调用脚本:
LC_ALL=fr_BE gawk -f test.awk < t.txt
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
4,3
5,7
9
Run Code Online (Sandbox Code Playgroud)
我设置了 fr_BE 语言环境,但结果仍然不正确。我怎样才能解决这个问题?
答案是使用--use-lc-numeric
gawk 选项。
--use-lc-数字
这会强制 gawk 在解析输入数据时使用语言环境的小数点字符。尽管 POSIX 标准要求此行为,并且 gawk 在 --posix 生效时会这样做,但默认值是遵循传统行为并使用句点作为小数点,即使在句点不是小数点字符的区域设置中也是如此。此选项会覆盖默认行为,没有 --posix 选项的完全严苛性。
假设我们有这个数据文件:
$ cat t.txt
4,3;5,7
4,9;5,7
Run Code Online (Sandbox Code Playgroud)
为了便于查看输出,我将这一行更改为test.awk
:
print "Total: "$1+$2
Run Code Online (Sandbox Code Playgroud)
现在,当您使用上述开关运行它时:
$ LC_ALL=fr_BE gawk --use-lc-numeric -f test.awk < t.txt
4,3
5,7
Total: 10
4,9
5,7
Total: 10,60
Run Code Online (Sandbox Code Playgroud)