循环结构 awk 的 while 循环结构,它等同于相应的 C 语言 while 循环。 awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值。 它类似于其它语言中的 "repeat...until" 循环。 示例: do...while 示例 { count=1 do { print "I get printed at least once no matter what" } while ( count != 1 ) } 与一般的 while 循环不同,由于在代码块之后对条件求值,"do...while" 循环永远都至少执行一次。 换句话说,当第一次遇到普通 while 循环时,如果条件为假,将永远不执行该循环。 for 循环 awk 允许创建 for 循环,它就象 while 循环,也等同于 C 语言的 for 循环: for ( initial assignment; comparison; increment ) { code block } 示例: for ( x = 1; x <= 4; x++ ) { print "iteration",x } 此段代码将打印: iteration 1 iteration 2 iteration 3 iteration 4 break 和 continue 此外,如同 C 语言一样,awk 提供了 break 和 continue 语句。使用这些语句可以更好地控制 awk 的循环结构。以下是迫切需要 break 语句的代码片断: while 死循环 while (1) { print "forever and ever..." } 因为 1 永远代表是真,这个 while 循环将永远运行下去。以下是一个只执行十次的循环: break 语句示例 x=1 while(1) { print "iteration",x if ( x == 10 ) { break } x++ } 这里,break 语句用于“逃出”最深层的循环。"break" 使循环立即终止,并继续执行循环代码块后面的语句。 continue 语句补充了 break,其作用如下: x=1 while (1) { if ( x == 4 ) { x++ continue } print "iteration",x if ( x > 20 ) { break } x++ } 这段代码打印 "iteration 1" 到 "iteration 21","iteration 4" 除外。如果迭代等于 4,则增加 x 并调用 continue 语句,该语句立即使 awk 开始执行下一个循环迭代,而不执行代码块的其余部分。如同 break 一样,continue 语句适合各种 awk 迭代循环。在 for 循环主体中使用时,continue 将使循环控制变量自动增加。以下是一个等价循环: for ( x=1; x<=21; x++ ) { if ( x == 4 ) { continue } print "iteration",x } 在 while 循环中时,在调用 continue 之前没有必要增加 x,因为 for 循环会自动增加 x。 数组 如果您知道 awk 可以使用数组,您一定会感到高兴。然而,在 awk 中,数组下标通常从 1 开始,而不是 0: myarray[1]="jim" myarray[2]=456 awk 遇到第一个赋值语句时,它将创建 myarray,并将元素 myarray[1] 设置成 "jim"。执行了第二个赋值语句后,数组就有两个元素了。 数组迭代 定义之后,awk 有一个便利的机制来迭代数组元素,如下所示: for ( x in myarray ) { print myarray[x] } 这段代码将打印数组 myarray 中的每一个元素。当对于 for 使用这种特殊的 "in" 形式时,awk 将 myarray 的每个现有下标依次赋值给 x(循环控制变量),每次赋值以后都循环一次循环代码。虽然这是一个非常方便的 awk 功能,但它有一个缺点 -- 当 awk 在数组下标之间轮转时,它不会依照任何特定的顺序。那就意味着我们不能知道以上代码的输出是: jim 456 还是: 456 jim 迭代数组内容就像一盒巧克力-您永远不知道将会得到什么。 (责任编辑:IT) |