continue文
continue文はbreakと似ていますが、for、while、およびdo-whileループ内だけで使われます。これは、ループ本体の残りの部分をスキップし、ループの次の繰り返しを直ちに開始します。ループから完全に脱出してしまうbreakと比べてみてください。次に例を示します。
# print names that don't contain the string "ignore"
# first, save the text of each line
{ names[NR] = $0 }
# print what we're interested in
END {
for (x in names) {
if (names[x] ~ /ignore/)
continue
print names[x]
}
}
この例は、入力レコードの1つに文字列`ignore'が含まれている場合、そのレコードについてはprint文をスキップし、ループの最初の文に戻って処理を続けます。
この例は、continueの良い例ではありません。このループは次のように簡単に書けるからです。
for (x in names)
if (names[x] !~ /ignore/)
print names[x]
forループ内でcontinue文を使うと、ループ本体の残りがスキップされ、for文のインクリメント式から実行が再開されます。次のプログラムでこれを説明します。
awk 'BEGIN {
for (x = 0; x <= 20; x++) {
if (x == 5)
continue
printf ("%d ", x)
}
print ""
}'
このプログラムは、5を除く0〜20までの数をすべて表示します。5の場合、printfをスキップします。インクリメントx++はスキップされないので、xは5のままではありません。上のforループと次のwhileループを比べてみましょう。
awk 'BEGIN {
x = 0
while (x <= 20) {
if (x == 5)
continue
printf ("%d ", x)
x++
}
print ""
}'
このプログラムは、xが5になると永久にループします。