awk关系操作符

关系操作符和布尔操作符用于在两个表达式之间进行比较。下表列出了关系操作符。
关系操作符

运算符 含义 示例
< 小于 x < y
<= 小于等于 x <= y
== 等于 x == y
!= 不等于 x != y
>= 大于等于 x >= y
> 大于 x > y
~ 与正则表达式匹配 x ~ /y/
!~ 与正则表达式不匹配 x !~ /y/

关系表达式可用在模式中来控制特殊的操作。例如,如果我们想限定要处理的记录包含5个字段,则可以用下面的表达式:

NF  ==  5

这个关系表达式将NF(每个输入记录的字段数)的值和5相比较。如果结果为真,那么就进行相应的处理,否则不进行处理。
注意: 关系操作符"== (相等)"和赋值操作符"= (等于)"是不同的。用"="代替"=="来检测相等性是一个经常犯的错误。

我们可以在试图打印数据库phonelist的记录之前用一个关系表达式来检测。

NF == 6  { print  $1 , $6  }

只有具有6个字段的记录才能被打印。

和"--"相反的是"! = (不相等的)"。同样地,可以比较一个表达式是否大于(>)或小于(<),或大于等于(>=),或小于等于(<=)另一个表达式。如下的表达式:

NR  >  1

检测当前记录号是否大于1,在条件表达式的一章,我们看到,关系表达式经常用在if语句中,通过计算来决定是否执行特殊的操作。

正则表达式经常用斜杠包围。这经常被作为正则表达式常量,正如"Hello"是一个字符串常量一样。我们已经看到很多这样例子:

/^$ /  { print  "This is a blank line."  }

然而,也常常不局限于正则表达式常量。当使用关系操作符~(匹配)或! ~ (不匹配)时,右边的表达式可以是awk中的任意表达式; awk将它作为一个字符串并用来指定一个正则表达式。

$5 ~  /MA /  { print  $1  ", " $6  }

这个语句是将第五个字段的值与正则表达式"MA"比较。

因为所有的表达式都与~口!~一起使用,因此正则表达式可以用变量来提供。例如,在脚本phonelist中,我们可以用state 来代替"/MA/" ,并编写一个过程来定义state的值。

$5 ~ state  { print  $1  ", " $6 }

这使得程序代码更加通用,因为在脚本执行过程中可以动态改变模式。例如,我们可以从命令行参数得到state的值,在之后的文章中我们将讨论如何将命令行参数传递给脚本。

参考资料:http://www.linuxawk.com/communication/503.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值