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