私はUnixの世界に初めて触れました^L
。ページ。
最初のファイルを見つけるためにファイルを読み取り、一時ファイルの次の^L
500個の出力を計算し、次の一時ファイルを作成するために読み続けたいと思います。それとももっと効率的な方法がありますか?
私のスクリプトは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つの文字^
とL
1つのリテラル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.txt
各test.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つのページタグを解析する必要があります。