4

ファイルがあり.bz2ます。大きすぎるため、解凍せずに最初または最後の10行をリストしたい。head -10orを試しましたが、意味tail -10不明です。また、2 つの圧縮ファイルを比較して、類似しているかどうかを確認する必要もあります。ファイルを解凍せずにこれを達成する方法は?

編集:同様の意味は同一です(同じ内容を持っています)。

4

2 に答える 2

10

bzip2はブロックベースの圧縮アルゴリズムであるため、理論的には解凍したい特定のブロックを見つけることができますが、これは複雑になります (たとえば、最終的に表示したい最後の 10 行が実際に 2 つ以上の圧縮ブロックにまたがっている場合はどうなるでしょうか?) .

あなたの当面の質問に答えるために、これを行うことができます。これは実際にファイル全体を解凍するため、ある意味では無駄ですが、そのファイルをどこにも保存しようとしないため、ストレージ容量の問題に遭遇することはありません:

bzcat file.bz2 | head -10
bzcat file.bz2 | tail -10

ディストリビューションに含まれていない場合bzcat(これは私の経験では少し珍しいことです)、bzcatと同等bzip2 -d -cです。

ただし、最終的な目的が 2 つの圧縮ファイルを比較することである場合 (異なるレベルで圧縮されている可能性があるため、実際の圧縮ファイルを直接比較することはできません)、これを行うことができます (bashシェルと仮定して):

cmp <(bzcat file1.bz2) <(bzcat file2.bz2)

これにより、両方のファイルが解凍され、解凍されたファイルのいずれかをどこにも保存することなく、圧縮されていないデータがバイト単位で比較されます。

于 2013-02-08T15:31:21.513 に答える
0

単純な標準bunzip2コマンドではこれを行うことができません。ただし、man ページには、bzip2 は 900 KB のブロックで動作し、bzip2recover個々のブロックを解凍できるプログラムであると記載されています。

その知識を使用して、目的のファイルから最初と最後の 900 KB (またはその程度) を切り取り、bzip2recover を使用してそれらを解凍する何かをまとめることができるはずです。

于 2013-02-08T14:13:34.190 に答える