在awk和mawk中浮动比较

时间:2016-12-16 08:58:08

标签: awk mawk

我无法理解为什么浮点数比较在mawk中不起作用:

mawk '$3 > 10' file.txt
[...]
9_6_F-repl      24834   38.8699
9_6_F   56523   17.9344
9_7_F   3196    3.68367
9_9_F   2278    2.37445
9_annua_M-merg  122663  163.557
9_huetii_F-merg 208077  172.775
[...]

虽然它在awk上做得非常完美:

awk '{if ($3 > 10) print $1}' file.txt

我显然在这里做错了什么,但我无法理解。

1 个答案:

答案 0 :(得分:2)

如果文件具有CRLF行终止符,则失败。首先删除\r

$ file foo
foo: ASCII text, with CRLF line terminators
$ mawk 'sub(/\r/,"") && ($3 > 10)'  foo
9_6_F-repl      24834   38.8699
9_6_F   56523   17.9344
9_annua_M-merg  122663  163.557
9_huetii_F-merg 208077  172.775

或者您也可以使用dos2unix等。

EDIT2 :如果您使用逗号作为小数点分隔符的区域设置,则会影响mawk中的浮动比较。

在这种情况下,你可以:

1)将语言环境设置为

LANG="en_US.UTF-8"

2)将小数分隔符更改为逗号并将其传递给mawk:

mawk '$3 > 10' <(cat file.txt | sed -e "s/\./,/")