• 本页内容

71. while 循环


awk 循环语句用于连续一次又一次地执行一组操作。只要循环条件为真,awk 就会一直执行语句。就像 C 程序一样,awk 支持各种循环语句。

首先,让我们看一下 while 循环语句。

语法:

while(condition)
    actions
  • while 是 awk 关键字。
  • condition 是条件表达式。
  • actions 是 while 循环的主体。 如果有多个操作,则这些操作必须括在大括号内。

awk while 循环首先检查条件。如果条件为真,则执行操作。执行完所有操作后,再次检查条件,如果为真,则再次执行操作。

重复此过程直到条件变为假。请注意,如果条件在第一次迭代中返回 false ,则操作将永远不会执行。

下面的示例使用 BEGIN 块,该块在 Awk 程序中的其他任何内容之前执行。 awk while 循环将字符 "x" 附加到变量 string 50 次。 变量 count 在每次检查时都会进行后递增,如果在递增之前小于 50 则执行操作。所以循环恰好执行了 50 次。 循环结束后,打印 string 变量的值。

$ awk 'BEGIN { while (count++<50) string=string "x"; print string }'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

以下 awk 程序从 items-sold.txt 文件中打印每个商品的已售商品总数。

对于每一行,程序必须将字段 2 到字段 7 的值相加。(字段 1 是项目编号,因此其值不会添加到总数中)。 因此,while条件从第二个字段开始(因为 while 之前的 i=2),并检查是否已到达记录中的最后一个字段(i <= NF)。 N 表示记录中的字段总数。

$ cat while.awk
{
    i=2; total=0;
    while (i <= NF) {
        total = total + $i;
        i++;
    }
    print "Item", $1, ":", total, "quantities sold";
}

$ awk -f while.awk items-sold.txt
Item 101 : 47 quantities sold
Item 102 : 10 quantities sold
Item 103 : 65 quantities sold
Item 104 : 20 quantities sold
Item 105 : 42 quantities sold