四 循环控制语句
linux awk中的流程控制语句和语法结构,与C语言类型。
awk 的 while、do-while、for语句中允许使用break、continue语句来控制流程走向,也允许使用exit这样的语句来退出,其中break中断当前正在执行的循环并跳到循环外执行下一条语句;if 是流程选择用法。
1) if-else if 语句
#!/bin/bash
awk 'BEGIN{
test = 80;
if(test >= 90){
print "good";
}else if(test >= 80){
print "soso";
}else{
print "fail";
}
}'
结果: soso
2) for 语句
#!/bin/bash
awk 'BEGIN{
for(i=1; i<=3; i++){
array[i] = i*i;
print i" = "array[i];
}
print
for(i=1; i<=length(array); i++){
if(array[i] > 5){ # larger 5 then break
break;
}
print i" = "array[i];
}
}'
结果:
1 = 1
2 = 4
3 = 9
1 = 1
2 = 4
3) while 语句
#!/bin/bash
awk 'BEGIN{
test = 100;
total=0;
while(i<=test){
total+=i;
i++;
}
print "total = ", total;
print
test=100;
total=0;
i=0;
do{
total+=i;
i++;
}while(i<=test);
print "total = ", total;
}'
结果:
total = 5050
total = 5050
以上为awk流程控制语句,从语法上与c语言是一样的。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快
跳转关键字
break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。continue 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
next 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。
exit 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。
性能比较
1) awk
time (awk 'BEGIN{ total=0; for(i=0; i<=100000; i++){total+=i;} print total;}')
结果:
5000050000
real0m0.035s
user0m0.020s
sys0m0.016s
2) sed
time(total=0; for i in $(seq 100000); do total=$(($total+i)); done; echo $total;)
结果:
5000050000
real0m0.976s
user0m0.672s
sys0m0.292s
测试100000累加,实现相同功能,awk实现的性能是shell 的约 30倍