web-dev-qa-db-ja.com

圧縮ファイルの行を数える

特定の数の行を持つunixに.gzファイルがある場合。それを解凍せずにunixの行を数えるにはどうすればよいですか?.

48
Vijay

ファイルがまだ圧縮されている場合、明らかに改行を数えることはできません。

しかし、(解凍された)ファイルをディスクに書き込むことなく、ストリームに解凍し、そのストリームの改行を数えることができます。それは次のようになります:

zcat file.gz | wc -l

解凍と猫にはzcat、wordcountにはwc。詳細については、両方のmanページを参照してください。

[〜#〜]編集[〜#〜]

Zcatがない場合、zcatはgunzip -cの別名です。

66
extraneon

これも機能しているようです-ファイル内の行末の数のgrep

zgrep -Ec "$" file.gz
8
Patrick Wright

すぐに実行したい場合は、 'pigz'(IIRCは「GZipの並列実装」の略です)を使用することをお勧めします。同様の状況で、gzipで圧縮された一連のファイルの行数を数えたいと思っていました。これが私の解決策です。

for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done

これにより、8つのプロセッサーを使用して、行数とファイルを交互の行でカウントしたファイルがわかりました。早く走った!

6
peter

正確な数ではなく大まかな見積もりで問題がなく、実際にファイル全体を抽出するか、行末までzgreppするのに時間がかかりすぎる場合(これは、今の私の状況でした)、次のことができます。

_zcat "$file" | head -1000 > 1000-line-sample.txt
ls -ls 1000-line-sample.txt "$file"
_

データが行ごとにかなり均一である限り、おおよその行数は1000 * (size of $file) / (size of 1000-line-sample)です。

2
James

次のコマンドを使用します。

gzgrep -c $ filename.gz

コマンドgzgrepgrepと同じように動作しますが、gzip圧縮ファイルに対してです。正規表現マッチングのためにファイルをその場で解凍します。

この場合、-cは一致した行の数を出力するようにコマンドに指示し、正規表現$は行の終わりに一致するため、すべての行またはファイルに一致します。

最終結果はgzip -dc filename.gz | grep -c $と同じです。

2
Ravi K M

gzip -cd <file.gz> | wc -l

これでうまくいきました。

0
prashanth