巨大な圧縮プレーンテキストファイルを部分的に抽出するには?

巨大な圧縮プレーンテキストファイルを部分的に抽出するには?

1.5GBサイズのzipファイルがあります。

その内容はとんでもない大きなプレーンテキストファイル(60GB)であり、現在ディスクにすべてを抽出するのに十分なスペースがなく、抽出したとしてもすべて抽出したくありません。

マイユースケースでは、一部を確認できれば十分です。

だから、ファイルの圧縮をストリームに解いてファイルの範囲にアクセスしたいと思います(通常のテキストファイルの頭と尾からアクセスできるように)。

メモリ(たとえば、32 GBの表示から始めて最大100 kbの抽出)または行(通常のテキスト行3700-3900を提供)を使用します。

これを達成する方法はありますか?

ベストアンサー1

ファイル(最小ファイルの最初の項目)gzipを抽出できます。したがって、そのアーカイブに大きなファイルが1つしかない場合は、次のことができます。zipzip

gunzip < file.zip | tail -n +3000 | head -n 20

たとえば、行3000から始めて20行を抽出します。

または:

gunzip < file.zip | tail -c +3000 | head -c 20

バイトについても同様です(サポートされheadている実装を仮定-c)。

Unixy 方式でアーカイブのすべてのメンバーに対して、次の操作を行います。

bsdtar xOf file.zip file-to-extract | tail... | head...

head組み込み関数を使用して次のこともksh93できます。/opt/ast/bin$PATH

.... | head     -s 2999      -c 20
.... | head --skip=2999 --bytes=20

いずれにせよ、//抽出したいセクションにリンクされているgzipファイルのセクション全体を常に解凍し、ここから削除する必要があることに注意してください。圧縮アルゴリズムの仕組みによって異なります。bsdtarunzip

おすすめ記事