gawk:对用逗号分隔符格式化的浮点数求和

gawk:对用逗号分隔符格式化的浮点数求和

我正在尝试对使用逗号作为分隔符的浮点数求和,而 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-numericgawk 选项。

--使用-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

相关内容