我无法理解为什么浮点数比较在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
我显然在这里做错了什么,但我无法理解。
答案 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/\./,/")