[toc]
awk条件
1.if
1.1 语法格式
{if(表达式) {语句1;语句2;...}}
1.2 示例
示例1:打印/etc/passwd文件中的root用户
[root@test1 ~]# awk -F: '{if ($3==0) {print $1 " is adminisitrator"}}' /etc/passwd
root is adminisitrator
示例2:统计/etc/passwd中系统用户数
[root@test1 ~]# awk -F: '{ if($3>0 && $3<1000){i++}} END {print i}' /etc/passwd
21
示例3:统计/etc/passwd中普通用户数量
[root@test1 ~]# awk -F: '{if ($3>1000) {i++}} END{print i}' /etc/passwd
2
示例4:写出一个shell脚本,把当前目录下的文本文件number.txt里面数字大于100的求和并输出,并打印所在行行号及内容,最后还要输出每一行的总和
//文件内容
[root@test1 ~]# cat number.txt
100
98
205
303
1
99
66
33
[root@test1 ~]# awk '{if($1>100){sum+=$1;print NR,$0}}{i+=$1}END{print sum,i}' number.txt
3 205
4 303
508 905
2.if...else
2.1 语法格式
{if(表达式){语句;语句;... }else{语句;语句;...}}
2.2 示例
示例1:if else语句简单使用
//文件内容
[root@test1 ~]# cat test.txt
1 2 3 4 5 6
[root@test1 ~]# awk '{if ($3==3) {print $1} else {print $NF}}' test.txt
1
[root@test1 ~]# awk '{if ($3==6) {print $1} else {print $NF}}' test.txt
6
示例2:打印/etc/passwd中非管理员个数和管理员个数
[root@test1 ~]# awk -F: '{if ($3==0) {a++} else {b++}} END{print "管理员用户个数:"a;print "其他用户个数:"b}' /etc/passwd
管理员用户个数:1
其他用户个数:24
3.if...else if...else
3.1 语法格式
{if(表达式 1){语句;语句;... }else if(表达式 2){语句;语句;... }else{语句;语句;... }}
3.2 示例
统计/etc/passwd文件中用户的种类
#/etc/passwd文件中第三列是用户UID,centos7中普通用户UID大于1000
awk -F: '{if($3==0){i++} else if($3>0 && $3<1000){j++} else{k++}} END{print "管理员个数为:"i;print "系统用户个数为:"j;print "普通用户个数为:"k}' /etc/passwd
管理员个数为:1
系统用户个数为:25
普通用户个数为:1
#if else if else if写法
[root@test1 ~]# awk -F: '{if($3==0){i++} else if($3>0 && $3<1000){j++} else if($3>=1000){k++}} END{print "管理员个数为:"i;print "系统用户个数为:"j;print "普通用户个数为:"k}' /etc/passwd
管理员个数为:1
系统用户个数为:25
普通用户个数为:1
4.switch-case
#示例
[root@test1 ~]# awk 'BEGIN{a=1;b=2;c=3; switch(a){case 1:print a;break;case 2:print b;break; case 3:print c;break;}}'
1
#格式化后的整体结构如下
BEGIN{
a=1;
b=2;
c=3;
switch(a){
case 1: print a;break;
case 2: print b;break;
case 3: print c;break;
}
}