1.5GBサイズのzipファイルがあります。
その内容はとんでもない大きなプレーンテキストファイル(60GB)であり、現在ディスクにすべてを抽出するのに十分なスペースがなく、抽出したとしてもすべて抽出したくありません。
マイユースケースでは、一部を確認できれば十分です。
だから、ファイルの圧縮をストリームに解いてファイルの範囲にアクセスしたいと思います(通常のテキストファイルの頭と尾からアクセスできるように)。
メモリ(たとえば、32 GBの表示から始めて最大100 kbの抽出)または行(通常のテキスト行3700-3900を提供)を使用します。
これを達成する方法はありますか?
ベストアンサー1
ファイル(最小ファイルの最初の項目)gzip
を抽出できます。したがって、そのアーカイブに大きなファイルが1つしかない場合は、次のことができます。zip
zip
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
ファイルのセクション全体を常に解凍し、ここから削除する必要があることに注意してください。圧縮アルゴリズムの仕組みによって異なります。bsdtar
unzip