4案例4:awk流程控制
4.1问题
本案例要求了解awk的流程控制操作,可自行设置awk语句来验证一下操作:
- if分支结构(单分支、双分支、多分支)
- 联系awk数组的使用
4.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