[root@hf-01 ~]# mkdir awk [root@hf-01 ~]# cd awk [root@hf-01 awk]# cp /etc/passwd ./test.txt [root@hf-01 awk]# ls test.txt
[root@hf-01 awk]# awk -F ':' '{print $1}' test.txt //打印出第一段內容 root bin daemon adm lp sync shutdown halt 等等等,只截取了一小部分 [root@hf-01 awk]# head -n3 test.txt |awk -F ':' '{print $1}' root bin daemon [root@hf-01 awk]#
awk命令以分隔符爲例,打印出第一段內容——>實際上並未去改變文件內容mysql
[root@hf-01 awk]# awk -F ':' '{print $0}' test.txt root:x:0:0:root:/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 等等等,只截取了一小部分 [root@hf-01 awk]#
- 打印第一段用 $1 表示
- 打印全部的段用 $0 表示
[root@hf-01 awk]# awk -F ':' '{print $1,$2,$4}' test.txt root x 0 bin x 1 daemon x 2 adm x 4 lp x 7 sync x 0 shutdown x 0 等等等,只截取了一小部分 [root@hf-01 awk]# head -n3 test.txt |awk -F ':' '{print $1"@"$2"@"$4}' //在前三行中,打印指定的段,並用 @ 分割 root@x@0 bin@x@1 daemon@x@2 [root@hf-01 awk]#
[root@hf-01 awk]# awk '/oo/' test.txt //打印匹配包含字符oo的行 root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin [root@hf-01 awk]#
[root@hf-01 awk]# awk -F ':' '$1 ~ /oo/' test.txt root:x:0:0:root:/root:/bin/bash [root@hf-01 awk]#
[root@hf-01 awk]# awk -F ':' '$1 ~ /o+/' test.txt //匹配第一段中包含o字符的行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown operator:x:11:0:operator:/root:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin [root@hf-01 awk]# [root@hf-01 awk]# awk -F ':' '$1 ~ /oo+/' test.txt root:x:0:0:root:/root:/bin/bash [root@hf-01 awk]#
這裏會發現,有特殊符號的時候,grep命令須要加 -E 脫義,sed命令須要加 -r 脫義,而awk命令中的特殊符號則不須要脫義就能夠實現操做sql
[root@hf-01 awk]# awk -F ':' '/root/ {print $1,$3} /usr/ {print $1,$3,$4}' test.txt //匹配包含root的行,打印第1段和第3段,而後在匹配包含usr的行並打印第3段和第4段 root 0 operator 11 games 12 100 [root@hf-01 awk]# grep -E 'root|usr' test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin [root@hf-01 awk]# [root@hf-01 awk]# awk -F ':' '/root|usr/ {print $0}' test.txt //在文件全部段中,匹配包含root和usr的行 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin [root@hf-01 awk]# awk -F ':' '/root|usr/ {print $1,$3,$4}' test.txt root 0 0 operator 11 0 games 12 100 [root@hf-01 awk]#
awk工具支持多個表達式一塊兒寫bash
[root@hf-01 awk]# awk -F ':' '$3==0' test.txt //匹配第3段等於0的,並打印全部段 root:x:0:0:root:/root:/bin/bash [root@hf-01 awk]# awk -F ':' '$3==0 {print $1}' test.txt //匹配第3段等於0的,並打印第1段 root [root@hf-01 awk]# awk -F ':' '$3>=1000 {print $0}' test.txt //匹配第3段大於等於1000的,並打印全部段 mysql:x:1000:1000::/home/mysql:/bin/bash [root@hf-01 awk]#
[root@hf-01 awk]# awk -F ':' '$3>="1000" {print $0}' test.txt 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 operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin mysql:x:1000:1000::/home/mysql:/bin/bash systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin [root@hf-01 awk]#
[root@hf-01 awk]# awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt //匹配打印出第7段不等於/sbin/nologin的全部段 root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mysql:x:1000:1000::/home/mysql:/bin/bash [root@hf-01 awk]#