我正在尝试对使用逗号作为分隔符的浮点数求和,而 gawk 进行整数计算。这是脚本:
BEGIN {
FS=";"
OFS=";"
CONVFMT = "%2.2f"
}
{
print $1
print $2
print $1+$2
}
我正在使用这个数据文件:
4,3;5,7
并像这样调用脚本:
LC_ALL=fr_BE gawk -f test.awk < t.txt
我得到这个输出:
4,3
5,7
9
我设置了 fr_BE 区域设置,但结果仍然不正确。我怎样才能解决这个问题?
答案1
答案是使用--use-lc-numeric
gawk 选项。
--使用-lc-数字
这会强制 gawk 在解析输入数据时使用语言环境的小数点字符。尽管 POSIX 标准要求这种行为,并且 gawk 在 --posix 生效时也会这样做,但默认情况下是遵循传统行为并使用句点作为小数点,即使在句点不是小数点字符的语言环境中也是如此。此选项会覆盖默认行为,而没有 --posix 选项的完全严格的严格性。
例子
假设我们有这个数据文件:
$ cat t.txt
4,3;5,7
4,9;5,7
为了便于查看输出,我更改了这一行test.awk
:
print "Total: "$1+$2
现在,当您使用上述开关运行它时:
$ 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
参考
答案2
我认为问题是gawk
无法将字符串转换4,3
为浮点数。您可以通过替换,
为来修复它.
。对于 @glenn jackman 输入:
BEGIN {
FS=";"
OFS=";"
CONVFMT = "%2.2f"
}
{
gsub(",",".",$0)
print $1
print $2
print $1+$2
}
$ LC_ALL=fr_BE gawk -f test.awk < file
4.3
5.7
10
4.9
5.7
10.6