awk處理條件:
認識awk處理條件的設置
1.使用正則設置條件
-輸出以bash結尾的完整記錄(輸出整行)
# awk -F: ‘/bash$/{print}’ /etc/passwd
-輸出包含root的行
# awk -F: '/root/' /etc/passwd
-輸出root或者tom賬戶的用戶名和UID信息
# awk -F: '/^(root|tom)/{print $1,$3}'
-輸出賬戶名稱包含oo的行,(第一 列包含oo)
# awk -F: '$1~/oo/' /etc/passwd
-輸出登錄shell不以nologin結尾的用戶名和登錄shell信息。
# awk -F: '$7!~nologin$/{print $1,$7}' /etc/passwd
!~ :取反匹配
2.使用數值/字符串比較設置條件
比較符號:==(等於) !=(不等於) >(大於)
=(大於等於) <(小於) <=(小於等於)
-輸出賬戶UID大於等於1000的賬戶名和UID的信息
# awk -F: '$3>=1000{print $1,$3}' /etc/passwd
-輸出第三行
# awk -F: 'NR==3{print}' /etc/ passwd
-輸出UID小於10的賬戶名和UID信息
# awk -F: '$3<10{print $1,$3}' /etc/passwd
-輸出用戶名爲“root”的行:
# awk -F: '$1=="root"' /etc/passwd
3.邏輯測試條件
-輸出賬戶UID大於10並且小於20的賬戶信息:
# awk -F: '$3>10 && $3<20' /etc/passwd
輸出賬戶UID大於1000或者賬戶UID小於10的賬戶信息:
# awk -F: '$3>1000 || $3<10' /etc/passwd
4.數學運算
[root@xieqc ~]# awk 'BEGIN{x++;print x}'
1
[root@xieqc ~]# awk 'BEGIN{x=8;print x+=2}'
10
[root@xieqc ~]# awk 'BEGIN{x=8;x--;print x}'
7
[root@xieqc ~]# awk 'BEGIN{print 2+3}'
5
[root@xieqc ~]# awk 'BEGIN{print 2*3}'
6
[root@xieqc ~]# awk 'BEGIN{print 2*3}'
6
[root@xieqc ~]# awk 'BEGIN{ print 23%8}'
7
[root@xieqc ~]# seq 200 | awk '$1%3==0{i++} END{print i}' //統計3的倍數的數量
66
-統計200以內3的倍數的數量
#seq 200 | awk ‘$1%3==0{i++} END{print i}’
awk過濾if分支結構:
if分支結構(雙分支、多分支)
1.單分支
統計/etc/passwd文件中UID小於或等於1000的用戶個數:
# awk -F: '{if($3<=1000){i++}}END{print i}' /etc/passwd
統計/etc/passwd文件中UID大於1000的用戶個數:
# awk -F: '{if($3>1000){i++}}END{print i}' /etc/passwd
統計/etc/passwd文件中登錄Shell是“/bin/bash”的用戶個數:
# awk -F: '{if($7~/bash$/){i++}}END{print i}' /etc/passwd
雙分支
分別統計/etc/passwd文件中UID小於或等於1000、UID大於1000的用戶個數:
# awk -F: '{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd
分別統計/etc/passwd文件中登錄Shell是“/bin/bash”、 登錄Shell不是“/bin/bash”的用戶個數:
# awk -F: '{if($7~/bash$/){i++}else{j++}} END{print i,j}' /etc/passwd