73. for 循环语句
awk for
语句在功能上与 awk while
循环相同,但 for
语句语法更易于使用。
语法:
for(initialization;condition;increment/decrement)
actions
awk for
语句首先执行初始化,然后检查条件。如果条件为真,则执行操作,然后递增或递减。只要条件为真,awk 就会重复执行该操作,然后执行递增/递减。
以下示例打印一行中字段的总和。最初变量
i
被初始化为 1; 如果
i
小于或等于字段总数,则将当前字段添加到总数中;
i
递增并重复测试。
$ echo "1 2 3 4" | awk \
'{ for (i = 1; i <= NF; i++) total = total+$i }; \
END { print total }'
10
以下示例使用 for
循环以相反顺序打印文件中的所有字段。请注意,这在 for
循环中使用递减而不是递增。
NF
变量设置为该行上找到的字段数。
此示例从
NF
开始到 1 以相反的顺序循环,并逐个输出字段。
它以字段
$NF
开头,然后是
$(NF-1)
, …,
$1
。之后它会打印一个换行符。
反过来举例:
$ 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
现在,我们将展示用于打印 items-sold.txt
文件中每件商品的销售总量的程序的 for
循环版本。
我们之前展示了 while-loop
和 do-while-loop
版本。
$ cat for.awk
{
total=0;
for (i=2; i <= NF; i++)
total = total + $i;
print "Item", $1, ":", total, "quantities sold";
}
$ awk -f for.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