● if 指令
语法:
if (表达式) {语句1}
else if (表达式) {语句2}
else {语句3}
范例 :
# awk 'BEGIN { T=79; if (T >=80) { print "Excellent!"; } else if (T >=60) { print "Pass!"; } else { print "Fail"; } }' Pass!
说明:
1. 备注:中括号内的语句均可包含多条。
2.设置变量T=79
3.如果T>=80,打印Excellent!
4.如果60<=T<80,打印Pass!
5.如果T小于60,则打印Fail!
● while 指令
语法 :
while( 表达式 ) {语句}
范例 :求100以内的和
# awk 'BEGIN { max=100; i=0; while ( i <= max ) { j += i i++ } print j; }' 5050
范例:打印出变量T中所有连续的数字
# awk 'BEGIN { T="p12-p34 p56-p78 p9 0"; while(match(T,/[0-9]+/) > 0) { print substr(T,RSTART,RLENGTH); sub(/[0-9]+/,"",T); } }' 12 34 56 78 9 0
说明:
1.设置变量“T”等于“ p12-p34 p56-p78”。
2.执行while指令,用match()函数去匹配出现一次以上的数字。
3.如果匹配到数字,则打印出其“起始位置”和“长度”,也就是打印出匹配到的数字。并从变量中删除数字,开始下轮循环。直到while循环结束。
● do-while 指令
语法 :
do {语句} while(表达式)
范例 :
# awk 'BEGIN { i = 0; j = 0; do { j += i; i++; } while ( i <= 100 ); print j; }'
说明:
1.设定变量 i = 0, j = 0
2.把变量 j 的值加变量 i 的值的结果赋予变量 j,变量 i 累加1
3.一直循环到变量 i >100,则打印变量 j 的值
● for 指令(一)
语法 :
for( 变量;条件;表达式) {statement}
范例:计算100以内整数的和
# awk 'BEGIN { j = 0; for ( i=0;i<=100;i++ ) { j += i; } print j; }' 5050
说明 :
变量 : 用于设定 for 循环的起始条件, 如上例中的 i=0
条件 : 用于设定该循环的停止条件, 如上例中的 i <= 100
表达式: 用于改变 counter 值, 如上例中的 i++
● for 指令(二)
语法:
for(变量 in 函数 ) {statement}
范例:
# awk 'BEGIN { array["a"]="apple";array["b"]="banana";array[3]="three";array[4]=40; for ( i in array ) { printf ( "array[%s] = %s\n",i,array[i] ) } }' array[4] = 40 array[a] = apple array[b] = banana array[3] = three
● break 指令
break 指令用以跳出循环(for, while, do-while 等循环).
范例 :
# awk 'BEGIN { for ( i = 1; i != 0; i++ ) { if ( i == 101 ) { break } j += i } print j; }' 5050
● continue 指令
循环中的 statement 进行到一半时, 执行 continue 指令来略过循环中尚未执行的statement.
范例 :求整数3以内的和。并打印大于3小于等于5的整数,且在其后加上字符串“hello”。
# awk 'BEGIN { for (i=0;i<=5;i++) { if (i <=3) { j+=i; continue; } print i,"hello" } print j; }' 4 hello 5 hello 6
说明:
break的作用是跳出循环。
continue的作用是略过其后的语句,但并未跳出循环。
上例中 i <= 3的值省略了其后的print语句。
● next 指令
执行 next 指令时, awk 将略过该指令之后的所有指令; 继续读取下一笔数据行,继续从第一个 Pattern {Actions} 开始执行。
范例 :
# cat tmp.txt web01[192.168.2.100] httpd ok tomcat ok sendmail ok web02[192.168.2.101] httpd ok postfix ok web03[192.168.2.102] mysqld ok httpd ok # cat tmp.txt | awk '/^web/ { T=$0;next}; /^[^$]/ { printf("%s %s %5s\n",T":\t",$1,$2); }' web01[192.168.2.100]: httpd ok web01[192.168.2.100]: tomcat ok web01[192.168.2.100]: sendmail ok web02[192.168.2.101]: httpd ok web02[192.168.2.101]: postfix ok web03[192.168.2.102]: mysqld ok web03[192.168.2.102]: httpd ok
● exit 指令
执行 exit 指令时, awk将立刻停止运行。
# awk 'BEGIN { for(i=0;i<=100;i++) { if(i==50) { print "exit program!" exit } j += i } print j }' exit program!