1200ページ文書を500ページに分割し、残りのページを500ページに分割します。

1200ページ文書を500ページに分割し、残りのページを500ページに分割します。

私はUnixの世界に初めて触れました^L。ページ。

最初のファイルを見つけるためにファイルを読み取り、一時ファイルの次の^L500個の出力を計算し、次の一時ファイルを作成するために読み続けたいと思います。それとももっと効率的な方法がありますか?

私のスクリプトはbashの実行で書かれています。MKSツールキット

ベストアンサー1

^Lすべてのページが(text)で始まるとしますCtrl+L

awk '/^L/ { p++ } (p-1) % 500 == 0 { f = FILENAME "-page-" p ".txt" } { print > f }' file.txt

行数を計算し^L、1を引いた値が500の引数の場合(1ページ、501ページ、1001ページなど)、変数をfファイル名に設定して次のテキストを出力します。

^Lコードの内容はawk次のとおりです。いいえ2つの文字^L1つのリテラルCtrl+L(入力が利用可能Ctrl+VCtrl+L)の代わりにこれを使用することもできます\014

小さなテスト文書の場合test.txt

^L
page 1
^L
page 2
^L
page 3
^L
page 4

...テストのために500を2に変更すると、2つのファイルが作成され、test.txt-page-1.txttest.txt-page-3.txtファイルには入力ファイルの2行(ページマークアップとテキスト)が含まれます。

test.txt-page-1.txt:

^L
page 1
^L
page 2

test.txt-page-3.txt:

^L
page 3
^L
page 4

解析するファイルには、明らかに最初のページ表示の前にヘッダーがあります。このヘッダーは無視する必要があります。上記のコマンドの次のバリエーションはawkこれを行います。

awk '/^L/ { p++ } (p-1) % 500 == 0 { f = FILENAME "-page-" p ".txt" } p > 0 { print > f }' file.txt

出力をpゼロより大きく制限することで、出力される前に少なくとも1つのページタグを解析する必要があります。

おすすめ記事