自動生成された増分ファイル名を取得するには:
awk '
/^END/ { inBlock=0 }
inBlock { print > outfile }
/^START/ { inBlock=1; outfile = "outfile" ++count }
' file
入力のファイル名を使用するには:
awk '
/^END/ { inBlock=0 }
inBlock { print > outfile }
/^START/ {
inBlock=1
outdir = outfile = $NF
sub(/\/[^\/]+$/,"",outdir)
system("mkdir -p \"" outdir "\"")
}
' file
@JamesBond が以下に抱えていた問題は、sub() の文字リスト内で「/」をエスケープしていなかったため、上記の回答を更新して今それを行うようにしました。エスケープする必要がある理由はまったくありませんが、どうやら nawk と /usr/xpg4/bin/awk の両方でエスケープする必要があるようです:
$ cat file
the
quick/brown
dog
$ gawk '/[/]/' file
quick/brown
$ nawk '/[/]/' file
nawk: nonterminated character class [
source line number 1
context is
>>> /[/ <<< ]/
$ /usr/xpg4/bin/awk '/[/]/' file
/usr/xpg4/bin/awk: /[/: [ ] imbalance or syntax error Context is:
>>> /[/ <<<
そして gawk はどちらの方法でも気にしません:
$ gawk --lint --posix '/[/]/' file
quick/brown
$ gawk --lint '/[/]/' file
quick/brown
$ gawk --lint --posix '/[\/]/' file
quick/brown
$ gawk --lint '/[\/]/' file
quick/brown
バックスラッシュを文字リストに入れずにエスケープすると、それらはすべて正常に機能します。
$ /usr/xpg4/bin/awk '/\//' file
quick/brown
$ nawk '/\//' file
quick/brown
$ gawk '/\//' file
quick/brown
ですから、将来の移植性のために覚えておく価値があると思います!