tac unzipped.log | grep -m1 pattern
tac
うまくいきますが、圧縮ファイルにはコマンドを使用できません。
tac zipped.gz | zgrep -m1 pattern
何も返しません。
tac
ファイルを解凍せずに使用できる方法はありますか?
答え1
gzipは最初のバイトから最後のバイトまでストリームとして機能します。途中から解凍できません。ほとんどの圧縮ツールは、途中から解凍を許可すると開始と終了の間の類似性を最大限に活用できないため、これを行います。したがって、gzipで圧縮されたファイルから文字列を取得するには、とにかくファイル全体を解凍する必要があります(興味がある場合は少なくとも最初の一致まで)。
また、tac
行はバイトではなく反転されます。解凍されたファイルは行に分割されていないため(他のファイルのように改行文字が1バイトのバイナリファイルです)、これによりファイルが使用できなくなります。
解凍したファイルを元に戻すことができます。
zcat zipped.gz | tac | grep -m1 pattern
しかし、これはファイル全体を検索するよりも必ずしも高速ではありません。tac
それ自体はそれほど高速ではないからです(ほとんどのアプリケーションは最初から最後まで読み取るので、カーネルはこの場合を最適化する傾向があります。その後、各バイトをtac
テストして改行文字です)。最後の行だけが必要な場合は抽出できます。
zcat zipped.gz | grep pattern | tail -n1