【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
在之前grep章节中用到很多正则表达式,这一节将在awk条件操作中使用正则表达式。awk 允许使用正则表达式,根据正则表达式是否匹配当前行来选择执行独立代码块。
下面先给出awk的条件操作符:
< 小于
<= 小于等于
== 等于
!= 不等于
> 大于
>= 大于等于
~ 匹配正则表达式
!~ 不匹配正则表达式
这一节继续使用上一节操作文件
1. 匹配
我们如果想筛选只符合条件(比如只要组名为aln)的行,可以这样写:
# # awk '$1~/aln/{print}' group_file1 aln x 1001 # awk'/aln/{print}' group_file1 aln x 1001 # awk '{if ($1 ~/aln/)print}' group_file1 aln x 1001 # awk '$1~/aln/'group_file1 //没有具体动作(如print),可以不用花括号,缺省动作是打印所有匹配记录。 aln x 1001
上面四种方法都是打印第一个域包含aln的行,同理!~操作符号使用方法相同。
2. 精确匹配
如果要精确匹配,可以使用==操作符。 例如:
# awk '$3 =="984"{print}' group_file1 vboxusers x 984allen # awk '{if($3=="984")print}' group_file1 vboxusers x 984allen # awk'$3=="984"' group_file1 vboxusers x 984allen #
!=操作符号使用类似。
3. 大于
下面示例使用如下被操作文件:
# catgroup_file2 wireshark x 987123 usbmon x 986 999 jackuser x 985 985 vboxusers x 9841003 allen aln x 1001 787
以下示例输出满足$3 > $4的行的组名称:
# awk '{if($3>$4)print $1}' group_file2 wireshark aln # awk'$3>$4{print $1}' group_file2 wireshark aln
操作符号<=、>、>=使用类似。
4. 行首匹配
# awk'$1~/^....user/' group_file2 jackuser x 985985 vboxusers x 9841003 allen # awk '{if($1~/^....user/)print}' group_file2 jackuser x 985985 vboxusers x 9841003 allen
awk 还允许使用布尔运算符 "||"(逻辑与)和"&&"(逻辑或),以便创建更复合布尔表达式,复合表达式即为模式间通过使用下述各表达式互相结合起来的表达式:
&& AND :语句两边必须同时匹配为真。
|| OR:语句两边同时或其中一边匹配为真。
! 非求逆
5. 求与:
# awk'$1~/^....user/ && $3==985' group_file2 jackuser x 985985 # awk '{if($1~/^....user/ && $3 == 985)print}' group_file2 jackuser x 985985
6. 求或
# awk '{if($1~/^....user/ || $3 == 1001)print}' group_file2 jackuser x 985985 vboxusers x 9841003 allen aln x 1001 787
7. 求非
# awk'!($1~/^....user/)' group_file2 wireshark x 987123 usbmon x 986 999 aln x 1001 787
时间: 2024-10-16 20:35:23