The `break' Statement
---------------------
The `break' statement jumps out of the innermost `for', `while', or
`do' loop that encloses it. The following example finds the smallest
divisor of any integer, and also identifies prime numbers:
# find smallest divisor of num
{
num = $1
for (div = 2; div*div <= num; div++)
if (num % div == 0)
break
if (num % div == 0)
printf "Smallest divisor of %d is %d\n", num, div
else
printf "%d is prime\n", num
}
When the remainder is zero in the first `if' statement, `awk'
immediately "breaks out" of the containing `for' loop. This means that
`awk' proceeds immediately to the statement following the loop and
continues processing. (This is very different from the `exit'
statement, which stops the entire `awk' program. Note:The `exit'
Statement.)
Th following program illustrates how the CONDITION of a `for' or
`while' statement could be replaced with a `break' inside an `if':
# find smallest divisor of num
{
num = $1
for (div = 2; ; div++) {
if (num % div == 0) {
printf "Smallest divisor of %d is %d\n", num, div
break
}
if (div*div > num) {
printf "%d is prime\n", num
break
}
}
}
The `break' statement has no meaning when used outside the body of a
loop. However, although it was never documented, historical
implementations of `awk' treated the `break' statement outside of a
loop as if it were a `next' statement (Note:The `next' Statement.
). Recent versions of Unix `awk' no longer allow this usage.
`gawk' supports this use of `break' only if `--traditional' has been
specified on the command line (Note:Command-Line Options.).
Otherwise, it is treated as an error, since the POSIX standard
specifies that `break' should only be used inside the body of a loop.
(d.c.)