跳到主要内容

[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;
}
}