2017-05-10 14 views
0

大きなgzファイル(11 GB)を用意しています.100 GBの空き容量のあるコンピュータには解凍できません。私はコマンドで最初の50 GBを抽出しました:.gzファイルの一部(先頭ではない)を抽出する方法は?

gzip -cd file.gz | dd ibs=1024 count=50000000 > first_50_GB_file.txt 

ファイルのこの部分からデータを正常に解析できました。今私は、解析するファイルの他の部分を抽出したいと思います。私は、ファイルから最後のn行を抽出し、その後、次のようにすることを解凍しようとしました:

tail -50 file.gz > last_part_of_file.gz 

私はその後、私が使用できることを期待:

gzip -cd last_part_of_file.gz | dd ibs=1024 count=50000000 > last_50_GB_file.txt 

が、tailコマンドを取っていますたった50行のテストでは> 10分。

誰かが.gzファイルの(潜在的に恣意的な)部分をどのように抽出するのかについての初めが含まれていない場合、私は非常に感謝します。

答えて

0

tailはバイナリファイルでは機能しません。 tail -50は最後の50行を返します。 '\ n'(char 10)区切り文字を探します。

gzip -cd file.gz | dd ibs=1024 count=50000000 > first_50_GB_file.txt 

gzip -cd file.gz | dd ibs=1024 skip=50000000 > after_50_GB_file.txt 

最初に抽出されたファイルサイズは100GBでしたが、 次の50ギガバイト

gzip -cd file.gz | dd ibs=1024 skip=100000000 count=50000000 > next_100-150_GB_file.txt 

ための50ギガバイト

gzip -cd file.gz | dd ibs=1024 skip=50000000 count=50000000 > next_50-100_GB_file.txt 

にスペースを制限するのではなく、それぞれの時間のgzipプロセスが原因圧縮アルゴリズムにアーカイブファイル の先頭から膨らませる必要があります。

+0

なぜ、テールが機能しないのか理解できました。私はこれを試し、多くの成功を収めていませんでした。 'を使用するgzip -cd file.gz | dd ibs = 1024 skip = 50000000> after_50_GB_file.txt ' ディスク上のすべての領域を占有しました。だから私は、コマンドにあるブロック数の後に停止するように指示しなければならないと仮定しました。私は次に試しました: 'gzip -cd file.gz | dd ibs = 1024 skip = 49000000 count = 50000000> after_49_GB_next_50GB.txt 'これで90 GBのファイルが作成されました。あなたは何が起こっているかも知っていますか? –

+0

何を手に入れましたか? –

+0

私はそれを使用することができました: gzip -cd file.gz | dd ibs = 1024スキップ= 49000000件数= 50000000件中= after_49GB_next_50_GB_file.txt ありがとうございました! –

関連する問題