ページごとに区切られたデータを含む巨大なテキストファイルがあります。たとえば、テキストの形式は次のとおりです。ページごとに行を読み、各ページを別々のファイルに保存したいとします。
Page 1
line 1
line 2
line 3
line 4
line 5
Page 2
line 1
line 2
line 3
line 4
line 5
Page 3
line 1
line 2
line 3
line 4
line 5
ベストアンサー1
解決策:
awk '/^Page [0-9]+$/ {N = $2}; {print > "page"N}' pages
テスト実行:
==> page1 <==
line 1
line 2
line 3
line 4
line 5
==> page2 <==
line 1
line 2
line 3
line 4
line 5
==> page3 <==
line 1
line 2
line 3
line 4
line 5
ただし、何千ものページがある場合、一部の実装では開いたawk
ファイル数に制限がある場合があります。新しいヘッダーが見つかったら、前のページのファイルを閉じてこの問題を解決できます。ファイル名の数字をゼロで埋め、昇順でls
表示することもできます。
awk '
/^Page [0-9]+$/ {close(file); file = sprintf("page%04d", $2)}
{print > file}' pages
入力がページごとに一度だけ含まれるとします。Page n