示例文本(取自CentOS7.0系统):
# cat -n awk1.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 dbus:x:81:81:System message bus:/:/sbin/nologin
15 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
16 abrt:x:173:173::/etc/abrt:/sbin/nologin
17 unbound:x:998:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
18 colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
19 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
20 ntp:x:38:38::/etc/ntp:/sbin/nologin
21 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
22 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
23 saslauth:x:996:76:"Saslauthd user":/run/saslauthd:/sbin/nologin
24 qemu:x:107:107:qemu user:/:/sbin/nologin
25 libstoragemgmt:x:995:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
26 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
27 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
28 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
29 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
30 radvd:x:75:75:radvd user:/:/sbin/nologin
31 chrony:x:994:993::/var/lib/chrony:/sbin/nologin
32 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
33 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
34 gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
35 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
36 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
37 tcpdump:x:72:72::/:/sbin/nologin
38 yfc001:x:1000:1000:yfc001:/home/yfc001:/bin/bash
39 systemd-bus-proxy:x:992:989:systemd Bus Proxy:/:/sbin/nologin
40 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
41 dockerroot:x:991:988:Docker User:/var/lib/docker:/sbin/nologin
42 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
43 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
44 named:x:25:25:Named:/var/named:/sbin/nologin
1、awk -F ":" '( $1 == "root" ) {print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
-F参数后跟指定的分隔符,默认为空格(单个或连续的多个)、制表符等,分隔符将一行文本分成几个域
/etc/passwd为awk要处理的文件
{print $0}指定输出信息,$0表示输出所有域,$1表示第一个域,$2表示第二个域,以此类推
($1 == "root")按域指定条件,$1表示第一个域,第一个域的值为字符串"root"时,执行后面指定输出信息的语句
2、awk -F ":" '( $1 == "root" ) || /sshd/ {print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
||条件或,满足左侧或右侧条件的时候,执行后面指定的输出
/sshd/按匹配字符串指定条件,斜杠之间的字符串为匹配字符串,一行文本中包含指定的字符串时,执行后面指定输出信息的语句
3、awk -F ":" '( $1 == "root" ) || /sshd/ {if($7~/^\/sbin\/nologin$/)print $0}' /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
if($7~/^\/sbin\/nologin$/)指定判断条件,承接前面的条件,由该if语句进行进一步的筛选,
$7表示第七个域,~后面引出该域要满足的条件,"\"为转义符,取消后面紧跟字符的特殊意义,使其只代表字符本身的意义,
^表示字符串的开头,$表示字符串的结尾,两个斜杠之间为匹配内容