For Statement (The GNU Awk User’s Guide)
Next: Switch Statement, Previous: Do Statement, Up: Statements [Contents][Index]
7.4.4 The for Statement
The for
statement makes it more convenient to count iterations of a loop. The general form of the for
statement looks like this:
for (initialization; condition; increment) body
The initialization
, condition
, and increment
parts are arbitrary awk
expressions, and body
stands for any awk
statement.
The for
statement starts by executing initialization
. Then, as long as the condition
is true, it repeatedly executes body
and then increment
. Typically, initialization
sets a variable to either zero or one, increment
adds one to it, and condition
compares it against the desired number of iterations. For example:
awk ' { for (i = 1; i <= 3; i++) print $i }' inventory-shipped
This prints the first three fields of each input record, with one input field per output line.
It isn’t possible to set more than one variable in the initialization
part without using a multiple assignment statement such as ‘x = y = 0
’. This makes sense only if all the initial values are equal. (But it is possible to initialize additional variables by writing their assignments as separate statements preceding the for
loop.)
The same is true of the increment
part. Incrementing additional variables requires separate statements at the end of the loop. The C compound expression, using C’s comma operator, is useful in this context, but it is not supported in awk
.
Most often, increment
is an increment expression, as in the previous example. But this is not required; it can be any expression whatsoever. For example, the following statement prints all the powers of two between 1 and 100:
for (i = 1; i <= 100; i *= 2) print i
If there is nothing to be done, any of the three expressions in the parentheses following the for
keyword may be omitted. Thus, ‘for (; x > 0;)
’ /@w is equivalent to ‘while (x > 0)
’ /@w . If the condition
is omitted, it is treated as true, effectively yielding an infinite loop (i.e., a loop that never terminates).
In most cases, a for
loop is an abbreviation for a while
loop, as shown here:
initialization while (condition) { body increment }
The only exception is when the continue
statement (see section The continue Statement) is used inside the loop. Changing a for
statement to a while
statement in this way can change the effect of the continue
statement inside the loop.
The awk
language has a for
statement in addition to a while
statement because a for
loop is often both less work to type and more natural to think of. Counting the number of iterations is very common in loops. It can be easier to think of this counting as part of looping rather than as something to do inside the loop.
There is an alternative version of the for
loop, for iterating over all the indices of an array:
for (i in array) do something with array[i]
See section Scanning All Elements of an Array for more information on this version of the for
loop.
Next: Switch Statement, Previous: Do Statement, Up: Statements [Contents][Index]