当awk碰到百分号%数值时

awk可以通过$1,$2等,对数据进行逻辑判断或处理,比如

> echo -e "1t2n3t4" | awk '{if($1==1){print $0}}'
1       2

但如果碰到带有百分号%的数据时,则不能直接通过加减乘除进行计算或者判断

> echo -e "1%t2%n3%t4%" | awk '{if($1==0.01){print $0}}'
>

因为系统没有将1%转成数值0.01,无法进行判断$1是否等于0.01

但是可以进行大小比较

> echo -e "1%t2%n3%t4%" | awk '{if($1>0.5){print $0}}'
1%      2%
3%      4%

但此时,两行数据都输出了,表示系统认为$1大于0.5

如果与1.00001进行大小判断,则第一行不被输出,与0.0009比较则第一行输出,所以个人感觉,当awk碰到带有百分号的数据时,如果进行大小判断,则不考虑百分号%,看下例,awk把1%当作了1

> echo -e "1%t2%n3%t4%" | awk '{if($1>0.0009){print $0}}'
1%      2%
3%      4%
> echo -e "1%t2%n3%t4%" | awk '{if($1>1.0001){print $0}}'
3%      4%
> echo -e "1%t2%n3%t4%" | awk '{if($1=$1+0){print $0}}'   
1 2%
3 4%

所以,如果在处理数据时,碰到百分号进行数据处理时,一定要小心
有一种方法就是,将$1转成数值类型,即将$1加0即可,但不要赋值给$1。
下例打印第一列为%1的行,先将$1加0,转换为数值,转换过程中awk不考虑百分号%,故和1进行比较

> echo -e "1%t2%n3%t4%" | awk '{if($1+0==1){print $0}}'   
1%      2%

#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
####################################################################

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.