if指令
while指令
do while指令
for( 变量;条件;表达式)
for(变量 in 函数)
break 指令
continue 指令
next 指令
exit 指令
● 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
# awk 'BEGIN {
for(i=0;i<=100;i++) {
if(i==50) { print "exit program!"
exit
}
j += i
}
print j
}'
exit program!