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

awk大于为什么显示字符串值?,awk,Awk,我正在使用这个命令 awk '$1 > 3 {print $1}' file; 文件: String 2 4 5 6 7 String 输出这个 String 4 5 6 7 String 为什么结果不仅仅是下面的数字 4 5 6 7 发生这种情况是因为比较的一侧是字符串,所以awk正在进行字符串比较,并且字符“S”的数值大于3 $ printf "3: %d S: %d\n" \'3 \'S 3: 51 S: 83 要获得所需的行为,需要将第一个字段转换为数字: awk '

我正在使用这个命令

awk  '$1 > 3 {print $1}' file;
文件:

String
2 
4
5
6
7
String
输出这个

String
4
5
6
7
String
为什么结果不仅仅是下面的数字

4
5
6
7

发生这种情况是因为比较的一侧是字符串,所以awk正在进行字符串比较,并且字符“S”的数值大于3

$ printf "3: %d S: %d\n" \'3 \'S
3: 51 S: 83
要获得所需的行为,需要将第一个字段转换为数字:

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

我正在使用一元加号运算符将字段转换为数字。或者,有些人更喜欢简单地添加0。

这是因为比较的一侧是字符串,所以awk正在进行字符串比较,并且字符“S”的数值大于3

$ printf "3: %d S: %d\n" \'3 \'S
3: 51 S: 83
要获得所需的行为,需要将第一个字段转换为数字:

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

我正在使用一元加号运算符将字段转换为数字。或者,有些人更喜欢简单地添加0。

摘自awk用户指南

比较混合类型的操作数时,将转换数值操作数 使用CONVFMT…的值创建字符串。。。CONVFMT的默认值是 “%.6g”,它打印至少有六个有效数字的值


因此,基本上它们都被视为字符串,“字符串”恰好大于“3”。

取自awk用户指南

比较混合类型的操作数时,将转换数值操作数 使用CONVFMT…的值创建字符串。。。CONVFMT的默认值是 “%.6g”,它打印至少有六个有效数字的值


所以,基本上它们都被视为字符串,“字符串”恰好大于“3”。

Nice,我不知道它使用了
CONVFMT
。Nice,我不知道它使用了
CONVFMT