圧縮されたテキストファイルの最後の数行を解凍して印刷する方法は?

圧縮されたテキストファイルの最後の数行を解凍して印刷する方法は?

6つのgzip圧縮テキストファイルがあり、各ファイルの圧縮サイズは約17Gです。特定の問題があるかどうかを確認するには、各ファイル(圧縮解除)の最後の数行を調べる必要があります。明らかな方法は非常に遅いです。

for i in *; do zcat "$i" | tail -n3; done

次のような巧妙なことができると思いました。

for i in *; do tail -n 30 "$i" | gunzip | tail -n 4 ; done

または

for i in *; do tac "$i" | head -100 | gunzip | tac | tail -n3; done

しかし、どちらも次のように文句を言いました。

gzip: stdin: not in gzip format

ヘッダーがないので、そういうことがわかりましたが、gzipこれも失敗しました。

$ aa=$(head -c 300 file.gz)
$ bb=$(tail -c 300 file.gz)
$ printf '%s%s' "$aa" "$bb" | gunzip
gzip: stdin: unexpected end of file

私が本当に探しているのはztailztacしかし私はそれが存在しないと思います。ファイル全体を解凍せずに圧縮ファイルの最後の数行を解凍して印刷できる巧妙なトリックを考案できる人はいますか?

ベストアンサー1

それのせいで君はできないすでに言った、ファイルが既に標準を使用している場合、gzip圧縮を制御できる場合は、次を使用できます。dictzipファイルを圧縮するには、ファイルを別のチャンクに圧縮します。最後のチャンク(通常64KB)のみを解凍できます。そして以前のバージョンと互換性がありますgzip。つまり、dictzip圧縮ファイルも完全に正当なgzip圧縮ファイルであることを意味します。

もう1つの可能性は、複数のgzipファイルをリンクしてgzipファイルを取得した場合は、最後のgzip署名を検索し、それ以降のすべてのコンテンツを解凍できることです。

おすすめ記事