awk的PATTERN表示方法:
1,正規表達式,格式為/regex/
以冒号為分隔符,顯示/etc/passwd以r開頭的行的第一段
[[email protected] awk]# awk -F: '/^r/{print $1}' /etc/passwd
root
以冒号為分隔符,顯示/etc/passwd以nologin結尾的行的第一段
[[email protected] awk]# awk -F: '/nologin$/{print $1}' /etc/passwd
bin
daemon
adm
lp
mail
以冒号為分隔符,顯示/etc/passwd以r或者h開頭的行的第一段
[[email protected] awk]# awk -F: '/^[rh]/{print $1}' /etc/passwd
root
halt
hei
寫出/etc/的軟連結的名字
[[email protected] awk]# ls -l /etc/ |awk '/^l/{print $NF}'
/usr/share/icons/hicolor/16x16/apps/fedora-logo-icon.png
../boot/grub2/grub.cfg
2,表達式,有下面操作符組成的表達式
awk的操作符
1 ,算術操作符
-x 負值
+x 轉換為數值,正值
x^y x**y 次方
x/y
x*y
x-y
x+y
x%y
2 ,字元串操作符
+:實作字元串連接配接 "ab"+"cd" abcd
3 ,指派操作符
=
+=
-+
*=
、=
%=
^=
**=
4 ,比較操作符
x<y
x<=y
x>y
x>=y
x==y
x!=y
x~y:x為字元串,y為模式,如果x可以被模式比對則為真,否則為假
x!~y
5 ,邏輯關系符
&& 與
|| 或者
顯示uid大于等于500的使用者的及uid
[[email protected] awk]# awk -F: '$3>=500{print $1,$3}' /etc/passwd
polkitd 999
saslauth 998
hei 1200
wei 1001
3 ,指定範圍,格式為pattern,pattern2
以冒号為分隔符,顯示uid=0到最後一個字段為nologin結尾中間所有的使用者名稱,uid及shell
[[email protected] awk]# awk -F: '$3==0,$7~"nologin$"{print $1,$3,$7}' /etc/passwd
root 0 /bin/bash
bin 1 /sbin/nologin
4 ,BEGIN/END, 特殊模式
BEGIN表示awk進行處理前執行一次操作
END表示awk處理完最後一行結束前執行一次操作
使用BEGIN列印表頭
[[email protected] awk]# awk -F: 'BEGIN{printf "%-10s%-10s%-20s\n","username","uid","shell"}$3==0,$7 ~ "nologin$"{printf "%-10s%-10s%-10s\n",$1,$3,$7}' /etc/passwd
username uid shell
root 0 /bin/bash
bin 1 /sbin/nologin
使用END列印表尾
[[email protected] awk]# awk -F: 'BEGIN{printf "%-10s%-10s%-20s\n","username","uid","shell"}$3==0,$7 ~ "nologin$"{printf "%-10s%-10s%-10s\n",$1,$3,$7}END{print "END OFFILE..."}' /etc/passwd
username uid shell
root 0 /bin/bash
bin 1 /sbin/nologin
END OFFILE...