跳到主要内容

[toc]

awk条件

if

语法格式

{if(表达式) {语句1;语句2;...}}

示例

示例1:打印 /etc/passwd 文件中的root用户

$ awk -F: '{if ($3==0) {print $1 " is adminisitrator"}}' /etc/passwd
root is adminisitrator

示例2:统计 /etc/passwd 中系统用户数

$ awk -F: '{ if($3>0 && $3<1000){i++}} END {print i}' /etc/passwd
21

示例3:统计 /etc/passwd 中普通用户数量

$ awk -F: '{if ($3>1000) {i++}} END{print i}' /etc/passwd
2

示例4:写出一个shell脚本,把当前目录下的文本文件 number.txt 里面数字大于100的求和并输出,并打印所在行行号及内容,最后还要输出每一行的总和

文件 number.txt 内容如下

100
98
205
303
1
99
66
33
$ awk '{if($1>100){sum+=$1;print NR,$0}}{i+=$1}END{print sum,i}' number.txt 
3 205
4 303
508 905

if...else

语法格式

{if(表达式){语句;语句;... }else{语句;语句;...}}

示例

示例1:if else 语句简单使用

文件 test.txt 内容如下

1 2 3 4 5 6
$ awk '{if ($3==3) {print $1} else {print $NF}}' test.txt 
1

$ awk '{if ($3==6) {print $1} else {print $NF}}' test.txt
6

示例2:打印 /etc/passwd 中非管理员个数和管理员个数

$ awk -F: '{if ($3==0) {a++} else {b++}} END{print "管理员用户个数:"a;print "其他用户个数:"b}' /etc/passwd
管理员用户个数:1
其他用户个数:24

if...else if...else

语法格式

{if(表达式 1){语句;语句;... }else if(表达式 2){语句;语句;... }else{语句;语句;... }}

示例

统计 /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 写法

$ 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

switch-case

说明

格式化后的整体结构如下

BEGIN{
a=1;
b=2;
c=3;
switch(a){
case 1: print a;break;
case 2: print b;break;
case 3: print c;break;
}
}
$ 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
Right Bottom Gif
Right Top GIF