web-dev-qa-db-ja.com

テキストファイルをしきい値よりも小さい断片に簡単に分割するにはどうすればよいですか?

Emacsで表示したい長さが100〜300 MBのテキストファイルがいくつかありますが、Emacsではそのような大きなファイルを開いたりトラバースしたりするときにパフォーマンスの問題が発生します。したがって、ファイルを管理可能なチャンク(それぞれ50 MBなど)に分割し、元の名前とシーケンス内の位置を示す接尾辞に基づいてチャンクに名前を付ける簡単なユーティリティを探しています。各チャンクは、前のチャンクが切り捨てられて50 MBを超えない場所をピックアップし、最後のチャンクはおそらく短くなります。

Linuxコンピューターでこれを行う簡単なツールはありますか?おそらく、チャンクごとに1つずつ、複数の結果をもたらすヘッドやテールのようなものはありますか?

たとえば、120MBの長さのファイルtest.outが与えられた場合、最初の50MBの場合はtest.out.1、次の50MBの場合はtest.out.2、残りの場合はtest.out.3に分割します。ファイルの終わりに20MB。

headtailの組み合わせを使用してピースを取得することもできますが、これをすべて抽象化するツール、おそらくPerlスクリプトまたはPython =そのようなタスクを実行するために誰かがすでに作成したスクリプト?

5
WilliamKF

そのための素晴らしいツールがすでにあります:split

> man 1 split 
 
 NAME 
 split-ファイルを分割します
 
 SYNOPSIS 
 split [-l line_count] [-a Supplement_length] [file [prefix]] 
 split -b byte_count [K | k | M | m | G | g] [-a Supplement_length] [file [prefix]] 
 split -p pattern [-a Supplement_length] [file [prefix]] 


split --bytes 50M test.out test.out_ファイルを分割しますtest.out into test.out_xaa、test.out_xab、test.out_xac、.。

はるかに醜い解決策は、ddを使用することです。

dd if=test.out of=test.out.part1 bs=1M count=50 skip=0test.outからの最初の50Mでtest.out.part1という名前のファイルを作成します。 skipの値を1に増やして2番目のチャンクを取得し、2に増やして3番目のチャンクを取得するなどできます。ファイル名も変更するようにしてください。変更しないと、同じ出力ファイルが上書きされてしまいます。

18
Hennes