我正在使用此命令
awk '$1 > 3 {print $1}' file;
文件:
String
2
4
5
6
7
String
输出这个;
String
4
5
6
7
String
为什么结果不仅仅是以下数字,
4
5
6
7
答案 0 :(得分:3)
这是因为比较的一边是字符串,所以awk正在进行字符串比较,字符'S'的数值大于3.
$ printf "3: %d S: %d\n" \'3 \'S
3: 51 S: 83
要获得所需的行为,您需要将第一个字段转换为数字:
awk '+$1 > 3 { print $1 }' file
我正在使用一元加运算符将字段转换为数字。或者,有些人更喜欢简单地添加0。
答案 1 :(得分:2)
取自awk用户指南...
ftp://ftp.gnu.org/old-gnu/Manuals/gawk-3.0.3/html_chapter/gawk_8.html
比较混合类型的操作数时,将转换数字操作数 使用CONVFMT的值来字符串。 ...... CONVFMT的默认值是 “%。6g”,打印一个至少有六位有效数字的值。
所以,基本上它们都被视为字符串,而“字符串”的发生大于“3”。