[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