awk大于为什么显示字符串值?

时间:2016-10-14 13:33:39

标签: awk

我正在使用此命令

awk  '$1 > 3 {print $1}' file;

文件:

String
2 
4
5
6
7
String
输出这个;

String
4
5
6
7
String

为什么结果不仅仅是以下数字,

4
5
6
7

2 个答案:

答案 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”。