Shell脚本,awk流程控制,支持for,if等
一、单分支if判断
1、awk ‘{指令}’ dir
awk -F: ‘BEGIN{x=0} {if($3>=1000){i++}}END{print i}’ /etc/passwd
统计文件中uid大于等于1000的内容的数量。
2、awk -F: ‘{if($1==“root”){print $1,$3}}’ /etc/passwd
awk风格与编程语言相似,常量使用双引号,而不可以使用单引号或者反引号
二、多分支if判断
1、双分支if…else
awk -F: ‘{if($3>=1000){i++}else{j++}} END{print i,j}’ /etc/passwd
判断uid1000以上的用户的个数和1000一下的用户个数
2、多分支,if…else if…else
awk -F: ‘{if($30){print $1}else if($31000){print $1}else{print $7}}’ /etc/passwd
三、for循环,awk的for采用c语言的语法格式
awk ‘BEGIN{for(i=1;i<=5;++i){print i}}{print}’ /etc/passwd
打印用户信息之前打印数字1-5
四、awk数组和应用
1、定义数组
格式:数组名[下标]=元素值
awk ‘BEGIN{name[0]=“TOM”;name[1]=“JERRY”;print name[0],name[1]}’
注意print后面的变量用,分隔,会在同一行用空格分开打印,如果用分号并写两个print,就会分别打印两行内容。
2、调用数组
数组名[下标]
3、遍历数组
for(变量名 in 数组名){print 数组名[变量]}
数组的定义不可以是name=“1234”,print name[1],这种用法在awk中是有语法错误的
例子:
1、awk ‘BEGIN{name[0]=“TOM”;name[1]=“JERRY”;print name[0],name[1]}’
在屏幕上打印TOM,JERRY
2、awk ‘{array[$1]++}END{for(i in array){print i,array[i]}}’ dir
打印指定文件中第一列内容重复的内容的重复次数