awk

For Loop Statement

for循环语句

awk for语句功能上类似于awk while循环,但是for语句语法非常容易使用。

语法

for (initialization;condition;increment/decrement)

awk for 语句开始被执行初始化,然后检查条件;如果条件为true,它执行动作,然后递增或递减。只要条件为真时,awk重复执行操作,然后递增或递减。

下面的例子打印一行的字段数,开始设置变量i为1,如果i小于等于总字段数,当前字段增加到total;i是递增并反复测试。

$ echo "1 2 3 4" | awk '{for(i=1; i<=NF; i++) total=total+$i};END{print total}'
10

下面的例子用for循环以相反的顺序打印文件里所有字段。请注意,这里使用递减,而不是递增的for循环。

注意:读取在每一行后, awk设置NF变量到该行上发字段数。

这个例子反转循环处理从NF到1并且输出一个一个输出字段。它从$NF字段开始,然后$(NF-1),…,$1.之后打印换行符。

Reverse For Example:

$ cat forreverse.awk
BEGIN {
    ORS="";
}
{
    for (i=NF; i > 0; i--)
    print $i," "
    print "\n";
}

$ awk -f forreverse.awk items-sold.txt
12  10  8  5  10  2  101
2  0  3  4  1  0  102
13  5  20  11  6  10  103
5  6  0  4  3  2  104
6  12  7  5  2  10  105

现在,我们将介绍for循环的版本程序,我们用来打印items-sold.txt文件里每个项目的sold总数。我们先前展示了一个while循环和do-while循环版本。

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

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