3

我不明白为什么浮点数比较在 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

我显然在这里做错了什么,但我不明白是什么。

4

1 回答 1

4

如果文件有 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/\./,/")
于 2016-12-16T09:24:51.890 回答