awk流程控制

1.1 問題

本案例要求瞭解awk的流程控制操作,可自行設置awk語句來有驗證以下操作:

if分支結構(單分支、雙分支、多分支)
練習awk數組的使用

1.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:awk過濾中的if分支結構

1)單分支

統計/etc/passwd文件中UID小於或等於1000的用戶個數:

[root@svr5 ~]# awk -F: '{if($3<=1000){i++}}END{print i}' /etc/passwd
39

統計/etc/passwd文件中UID大於1000的用戶個數:

[root@svr5 ~]# awk -F: '{if($3>1000){i++}}END{print i}' /etc/passwd
8

統計/etc/passwd文件中登錄Shell是“/bin/bash”的用戶個數:

[root@svr5 ~]# awk -F: '{if($7~/bash$/){i++}}END{print i}'  /etc/passwd
29

2)雙分支

分別統計/etc/passwd文件中UID小於或等於1000、UID大於1000的用戶個數:

[root@svr5 ~]# awk -F: '{if($3<=1000){i++}else{j++}}END{print i,j}' /etc/passwd
39 8

分別統計/etc/passwd文件中登錄Shell是“/bin/bash”、 登錄Shell不是“/bin/bash”的用戶個數:

[root@svr5 ~]# awk -F: '{if($7~/bash$/){i++}else{j++}} END{print i,j}' /etc/passwd
29 38

步驟二:awk數組

1)數組的語法格式

數組是一個可以存儲多個值的變量,具體使用的格式如下:

定義數組的格式:數組名[下標]=元素值

調用數組的格式:數組名[下標]

遍歷數組的用法:for(變量 in 數組名){print 數組名[變量]}。

[root@svr5 ~]# awk 'BEGIN{a[0]=11;a[1]=88;print a[1],a[0]}'
88 11
[root@svr5 ~]# awk 'BEGIN{a++;print a}'
1
[root@svr5 ~]# awk 'BEGIN{a0++;print a0}'
1
[root@svr5 ~]# awk 'BEGIN{a[0]++;print a[0]}'
1
[root@svr5 ~]# awk 'BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}'
0 0
1 11
2 22

注意,awk數組的下標除了可以使用數字,也可以使用字符串,字符串需要使用雙引號:

[root@svr5 ~]# awk 'BEGIN{a["hehe"]=11;print a["hehe"]}'
11
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章