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 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.
Here is an example of a for
statement:
awk '{ for (i = 1; i <= 3; i++) print $i }' inventory-shipped
This prints the first three fields of each input record, one field per line.
You cannot set more than one variable in the
initialization part unless you use a multiple assignment statement
such as `x = y = 0', which is possible only if all the initial values
are equal. (But you can initialize additional variables by writing
their assignments as separate statements preceding the for
loop.)
The same is true of the increment part; to increment additional
variables, you must write separate statements at the end of the loop.
The C compound expression, using C's comma operator, would be useful in
this context, but it is not supported in awk
.
Most often, increment is an increment expression, as in the example above. But this is not required; it can be any expression whatever. For example, this statement prints all the powers of two between one and 100:
for (i = 1; i <= 100; i *= 2) print i
Any of the three expressions in the parentheses following the for
may
be omitted if there is nothing to be done there. Thus, `for (; x
> 0;)' is equivalent to `while (x > 0)'. If the
condition is omitted, it is treated as true, effectively
yielding an infinite loop (i.e. a loop that will never
terminate).
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.
There is an alternate 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.
The awk
language has a for
statement in addition to a
while
statement because often a for
loop is 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.
The next section has more complicated examples of for
loops.
Go to the first, previous, next, last section, table of contents.