awk流程控制
作者:互联网
4.awk流程控制
问题
本案例要求了解awk的流程控制操作,可自行设置awk语句来有验证以下操作:
if分支结构(双分支、多分支)
while/for循环结构
break、continue、next等其他控制语句
步骤
实现此案例需要按照如下步骤进行。
步骤一:awk过滤中的if分支结构
1)单分支
统计/etc/passwd文件中UID小于或等于500的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0}{if($3<=500){i++}}END{print i}’ /etc/passwd
39
统计/etc/passwd文件中UID大于500的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0}{if($3>500){i++}}END{print i}’ /etc/passwd
28
统计/etc/passwd文件中登录Shell是“/bin/bash”的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0}{if(7 /bash/){i++}}END{print i}’
/etc/passwd
29
统计/etc/passwd文件中登录Shell不是“/bin/bash”的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0}{if(7! /bash/){i++}}END{print i}’
/etc/passwd
38
2)双分支
分别统计/etc/passwd文件中UID小于或等于500、UID大于500的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0;j=0}{if($3<=500){i++}else{j++}}END{print i,j}’ /etc/passwd
39 28
分别统计/etc/passwd文件中登录Shell是“/bin/bash”、 登录Shell不是“/bin/bash”的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0;j=0}{if(7 /bash/){i++}else{j++}}
END{print i,j}’ /etc/passwd
29 38
3)多分支
分别统计/etc/passwd文件中登录Shell是“/bin/bash”、“/sbin/nologin”、其他的用户个数:
[root@svr5 ~]# awk -F: ‘BEGIN{i=0;j=0;k=0}{if(7 /bash/){i++}
else if(7 /nologin/){j++}else{k++}}END{print i,j,k}’ /etc/passwd
29 33 5
步骤二:awk过滤中的while/for循环结构
1)while循环
统计/etc/passwd文件内“root”出现的次数。
—— 分析:以“:”或“/”做分隔,针对每一行的每一列进行比对,如果包含“root”,则次数加1。其中,逐行处理直接由awk完成,逐列处理交给while循环,通过i变量依次取$1、2、……、NF进行检查;变量j在预处理时赋值0,没匹配一个字段加1。
[root@svr5 ~]# awk -F [
标签:控制,BEGIN,passwd,流程,svr5,etc,awk,root 来源: https://blog.csdn.net/weixin_44792344/article/details/90631999