Linux awk 数组和循环(4)

四 循环控制语句

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

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e2b61522f537341e6bde86697f6542b9.html