Go to the first, previous, next, last section, table of contents.

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ルール内では使えません。


Go to the first, previous, next, last section, table of contents.