Awk的流程控制
一、三元操作符
?:

判断条件?输出结果1:输出结果2
如果条件为真,输出问号后面的结果,否则输出冒号后面的结果
[root@shell shelldoc]# awk -F: '{print $1":"($3>$4?"uid:"$3:"gid:"$4)}' pass二、分支判断结构
if
1、语法格式:
if(条件表达式)
{
动作    
}
else
{
动作        
}[root@shell shelldoc]#  if1.awk
BEGIN{
FS=":"
}
{
if($3>$4)
{
print $1":uid:"$3
}
else
{
print $1":gid:"$4
}
}
[root@shell shelldoc]# awk -f if1.awk pass2、多分支判断语法结构
if(条件表达式)
{
动作        
}
else if(条件表达式)
{
动作        
}
... ...
else
{
动作        
}
[root@shell shelldoc]# cat score 
mike 83
rose 60
john 99
larry 65
[root@shell shelldoc]# cat if2.awk
#!/bin/awk -f           //shabang,指定文件中的命令的解析环境是awk
NR>0{
if($2>=90)
{
print $1": A"
}
else if($2>=80)
{
print $1": B"
}
else 
{
print $1": C"
}
}
[root@shell shelldoc]# chmod +x if2.awk 
[root@shell shelldoc]# ./if2.awk score
mike: B
rose: C
john: A
larry: C三、循环
功能:
1)从行中取出每个字段,主要用于循环字段
2)遍历数组元素
1、while循环
语法:
变量初始值
while (条件)
{
动作
变量的更新            
}   [root@shell shelldoc]# cat score
mike 85 80 90
[root@shell shelldoc]#  while1.awk
/mike/{
i=1
while(i<=NF)
{
print $i
i++
}
}   
[root@shell shelldoc]# awk -f while1.awk score 
mike
85
80
902、do循环

3、for循环
语法:
for(变量初始值;判断条件;变量的更新)
{
动作            
}
[root@shell shelldoc]#  for1.awk
/mike/{
for(i=1;i<=NF;i++)
{
print $i
}
}统计单词的次数
awk '{for(i=1;i<=NF;i++){print $i}}' | sort | uniq -c四、判断加循环
例子:
输出每行的最大值
[root@shell shelldoc]# cat number 
90 10 70
70 49 33
22 82 91
88 100 33
[root@shell shelldoc]#  if-for.awk
{
max=$1
for (i=1;i<=NF;i++)
{
if($i>max)
{
max=$i
}
}
print max 
}
[root@shell shelldoc]# awk -f if-for.awk number 
90
70
91
100五、双重循环 (嵌套循环)
打印99乘法口诀表
[root@shell shelldoc]#  for-for.awk
BEGIN{
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf j"*"i"="i*j"\t"
}
printf "\n"
}
}
[root@shell shelldoc]# awk -f for-for.awk 
1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81六、循环控制语句
continue 跳出本次循环
[root@shell shelldoc]# cat for-for.awk
BEGIN{
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
if (j==4) {continue}
else
{ 
printf j"*
"i"="i*j"\t"
}
}
printf "\n"
}
}break 跳出当前循环
[root@shell shelldoc]# cat for-for.awk
BEGIN{
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
if (j==4) {break}
else
{ 
printf j"*"i"="i*j"\t"
}
}
printf "\n"
}
}exit 退出脚本
[root@shell shelldoc]# cat for-for.awk
BEGIN{
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
if (j==4) {exit}
else
{ 
printf j"*"i"="i*j"\t"
}
}
printf "\n"
}
} next 跳过本行,读取下一行
[root@shell shelldoc]# awk '/name/{next};{print $0}' score