ページのデータを読み、別のファイルに保存する

ページのデータを読み、別のファイルに保存する

ページごとに区切られたデータを含む巨大なテキストファイルがあります。たとえば、テキストの形式は次のとおりです。ページごとに行を読み、各ページを別々のファイルに保存したいとします。

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

おすすめ記事