awk流程控制

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
发布了117 篇原创文章 · 获赞 2 · 访问量 3368

猜你喜欢

转载自blog.csdn.net/weixin_41176080/article/details/103933086