exit 後の END ブロック

IRC での質問からですが、awk で exit 命令を使ったときの awk の挙動です。

  • BEGIN ブロックで使った場合は、アクションブロックは実行されないが、END ブロックは実行されます。
  • アクションブロックで使った場合は、それ以降のアクションの実行を止め、END ブロックを実行します。
  • END ブロックで実行された場合は、即座に exit します。

実際に試してみましょう。

  • BEGIN ブロックで使った場合
$ seq 10 | awk 'BEGIN{exit;print "begin"}{print "action"}END{print "end"}'
end
  • アクションブロックで使った場合
$ seq 10 | awk 'BEGIN{print "begin"}{exit;print "action"}END{print "end"}'
begin
end
  • END ブロックで使った場合
$ seq 10 | awk 'BEGIN{print "begin"}{print "action"}END{exit;print "end"}'
begin
action
action
action
action
action
action
action
action
action
action