天天看點

Linux shell awk模式使用awk的PATTERN表示方法:awk的操作符

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...
           

繼續閱讀