next文
next文は現在のレコードの処理を直ちに中止して、次のレコードへ移ります。これは、現在のレコードに対してこれ以上ルールが実行されないことを意味します。現在のルールのアクションの残りも実行されません。
このnext文とgetline関数の動作を比べてみましょう(see section getlineでの明示的な入力)。getline関数も、直ちに次のレコードを読み込みますが、制御の流れは変更されません。したがって、現在のアクションの残りは、新しい入力レコードに対して実行されます。
大まかに見れば、awkプログラムの実行は、入力レコードを読み込んで、それを各ルールのパターンでテストするループです。このループを、本体にルールが含まれたfor文と考えれば、next文はcontinue文に似ています。つまり、この明示的なループの本体の終りにスキップし、インクリメント(別のレコード読み込む)を実行します。
たとえば、awkプログラムが、4つのフィールドを持つレコードに対してのみ働き、誤った入力が与えられた場合に失敗しないようにしたいなら、プログラムの初めのあたりで次のルールを使うと良いでしょう。
NF != 4 {
printf("line %d skipped: doesn't have 4 fields", FNR) > "/dev/stderr"
next
}
この場合、これ以降のルールは誤ったレコードに対しては適用されません。エラーメッセージは、表示されるべきではないので標準エラー出力ストリームにリダイレクトされています。See section 標準I/Oストリーム。
next文はBEGINルールまたはENDルール内では使えません。