Linux高级文本处理之gawk变量的操作符(3)

实例9:打印/etc/passwd 中 UID >= 100 并且用户的 shell 是/bin/sh 的用户

[root@localhost ~]# awk -F: '$3 >= 100 && $7 == "/bin/sh"' /etc/passwd  user1:x:800:800:test user:/none:/bin/sh

或者:

[root@localhost ~]# awk -F ':' '$3 >= 100 && $NF ~ /\/bin\/sh/' /etc/passwd user1:x:800:800:test user:/none:/bin/sh       #正则表达式模式匹配

实例10:打印/etc/passwd 中没有注释信息(第 5 个字段)的用户

[root@localhost ~]# awk -F: '$5 == ""' /etc/passwd abrt:x:173:173::/etc/abrt:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin sys:x:498:1001::/home/sys:/bin/bash natasha:x:1006:1007::/home/natasha:/bin/bash harry:x:1007:1008::/home/harry:/bin/bash sarah:x:497:497::/home/sarah:/bin/nologin

实例11:使用取反(!)运算符打印奇数行

1

2

3

4

5

6

 

[root@localhost ~]# seq 10 | awk 'i=!i'

1

3

5

7

9

 

实例12:打印偶数行

1

2

3

4

5

6

 

[root@localhost ~]# seq 10 | awk -v i=1 'i=!i'

2

4

6

8

10

 

六、正则表达式操作符

3e41ce844b1e7f67.png

实例1:

[root@localhost ~]# cat items.txt  101,HD Camcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3 Player,Audio,270,15 104,Tennis Racket,Sports,190,20 105,Laser Printer,Office,475,5 [root@localhost ~]# awk -F, '$2 == "Tennis"' items.txt  #精确匹配 [root@localhost ~]# awk -F, '$2 ~ "Tennis"' items.txt   #模糊匹配 104,Tennis Racket,Sports,190,20

实例2:

[root@localhost ~]# awk -F, '$2 !~ "Tennis"' items.txt  #不匹配 101,HD Camcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3 Player,Audio,270,15 105,Laser Printer,Office,475,5

实例3:打印 shell 为/bin/bash 的用户的总数,如果最后一个字段包含”/bin/bash”,则变量n 增加 1

[root@localhost ~]# grep -c '/bin/bash' /etc/passwd                                      9 [root@localhost ~]# awk -F: '$NF ~ /\/bin\/bash/ { n++ } END{ print n}' /etc/passwd 9

补充说明:

awk PATTERN模式的其他形式:

empy:空模式,匹配所有行

关系表达式,表达式结果非0为真,则执行后面body中语句;0则为假,不执行。例如

1

 

awk -F: '$3>=500{print $1,$3} ' /etc/passwd

 

3.行范围,类似sed或vim中的地址定界:

1

 

/start pattern/,/end pattern/

 

注意:不支持直接给出数字格式

 

实例:

1

2

3

4

5

6

7

8

9

10

 

[root@localhost ~]# awk '/^root/,/^mail/{print $0}' /etc/passwd   

root:x:0:0:young,geek,010110110,0101101101:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14371.html