awk连载2:awk的操作符

前面讲了,awk在一行内容里先匹配是否含有某关键字,然后再决定要不要对此行进行相关操作,awk ‘/关键字/{print $n}’。但是如果想判断,某个字段(awk对行进行分段)是否含有某个关键字,或者是否满足某个正则表达式表示的意思,才会进行相关操作。

==和!=操作符的用法

awk ‘$N == 字符{print操作}’ file

注意这里要找的字符要用双引号引起来,意思是只有第N部分的值等于指定的字符才会打印:

比如如下文件

[root@vms63 ~]# cat aa.txt

aaa 1 root 11111

bbb 2 ro2t 222 ddd aaa

ccc 3 xxxx  r22t  dddd

ddd 4 yyy  root 222

eee 5 aaa zzz

要求,首先找到第3部分是root的行,然后打印第1部分的值,命令如下:

awk连载2:awk的操作符 

只有第一行的第三部分是root,所以才会满足

如果表示不等于的话,则用!= ,比如找到第三部分不是root的,才执行命令:

awk连载2:awk的操作符 

~的用法

awk ‘$N~ /正则/{print操作}’ file

或者

awk ‘$N~”正则{print操作}’ file

练习:在aa.txt里找到第3部分满足 首字母是r,第二个是字母的,第三个无所谓,第四个字符是t的行,然后打印$1 :

awk连载2:awk的操作符 

或者

awk连载2:awk的操作符 

> 及<操作符的使用

用法如下:awk ‘$N>数值{print操作}’ file

练习:在aa.txt里找出 第二部分小于3 的那些行,然后打印第一部分:

awk连载2:awk的操作符 

注:还有 >=  、 <=等其他操作符

上面的都是指定了一个条件,如果想使用多个条件的话,可以用&&或者||作为连接符:

条件1 && 条件2  要两个条件全部满足

条件1 || 条件2   只要满足一个条件即可

练习:找到第3部分满足:第一个字符是r,第二个是字母,第三个是数字的,最后为t的行,且第2部分大于等于2的行,然后打印第一部分:

awk连载2:awk的操作符 

 

练习1:找出uid是65534的用户名,并且以:

用户名:uid:gid 格式来显示

答案:

awk连载2:awk的操作符 

练习2:如下虚拟机的配置如下:

[root@server2 ~]# virsh domiflist director

接口     类型     源        型号      MAC

-------------------------------------------------------

vnet0      network    external   virtio      52:54:00:d0:75:a2

vnet1      network    pri        virtio      52:54:00:e3:10:25

[root@server2 ~]#

现在想截取网络使用pri的网卡的ma地址:

awk连载2:awk的操作符 

 

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读