第6.4节:awk语言 for 语句
1 第6.4节:awk语言 for 语句
for
语句让统计循环迭代次数变得更加便捷。for
语句的一般形式如下:
for (initialization; condition; increment)body
initialization
(初始化 )、condition
(条件 )和 increment
(增量 )部分可以是任意 awk
表达式,body
代表任意 awk
语句。
for
语句的执行流程是:先执行 initialization
。之后,只要 condition
为真,就会重复执行 body
,然后执行 increment
。通常,initialization
会把一个变量设为 0 或 1,increment
会给该变量加 1,condition
则会将其与期望的迭代次数做比较。例如:
awk '
{for (i = 1; i <= 3; i++)print $i
}
' inventory-shipped
这段代码会打印每个输入记录的前三个字段,每个字段单独占一行输出。
熟悉 C 和 C++ 的程序员可能会期望能使用逗号运算符,在 for
循环的 initialization
部分设置多个变量,或者在循环的 increment
部分递增多个变量,像这样:
for (i = 0, j = length(a); i < j; i++, j--) ... // C/C++ 写法,不是 awk 的!
但在 awk
中无法这样做,因为 awk
不支持逗号运算符。虽然有变通方法,但这些方法并不直观,还可能导致代码难以阅读和理解。因此,最好的做法是,在 for
循环之前,把额外的初始化操作写成单独的语句;在循环体末尾,把额外的增量操作也写成单独的语句。
多数情况下,increment
是一个增量表达式,就像前面的例子那样。但这不是强制要求,它可以是任意表达式。比如,以下语句会打印出 1 到 100 之间的所有 2 的幂:
for (i = 1; i <= 100; i *= 2)print i
如果不需要执行任何操作,for
关键字后面括号里的三个表达式中的任意一个都可以省略。比如,for (; x > 0;)
等价于 while (x > 0)
。如果省略 condition
,它会被视为真,实际上就会产生一个无限循环(即永远不会终止的循环 )。
在大多数情况下,for
循环是 while
循环的一种简写形式,如下所示:
initialization
while (condition) {bodyincrement
}
唯一的例外是,当在循环内部使用 continue
语句时。把 for
语句改写成 while
语句的形式,可能会改变循环内部 continue
语句的效果。
awk
语言既有 for
语句又有 while
语句,是因为 for
循环在需要统计迭代次数的场景中,写起来更省事、思考起来更自然。把计数操作视为循环的一部分,而不是循环内部要做的事,可能会更容易。
for
循环还有另一种变体,用于遍历数组的所有下标:
for (i in array)do something with array[i]
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.