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


回答:


61

ファイルがまだ圧縮されている場合、明らかに改行をカウントできません。

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

zcat file.gz | wc -l

解凍と猫のzcat、ワードカウントのwc。詳細を知りたい場合は、両方のmanページを参照してください。

編集

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


7
gzipとは異なるユニックスではcompress、あなたが欲しいgzcat
コーンスレイヤー


5

すぐに実行したい場合は、「pigz」(IIRCは「GZipの並列実装」の略)を使用することをお勧めします。同様の状況で、大量のgzipされたファイルの行数をカウントしたいのですが、これが私の解決策でした。

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

これにより、8つのプロセッサを使用して、行数と、交互の行からカウントされるファイルが得られました。すぐに走りました!


1
またはunpigzは単純で、使用できない場合for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Calimo

2

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

gzgrep -c $ filename.gz

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

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

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


gzgrepSolaris以外のシステム上で利用可能?
pabouk 14年

1
いいえ。他のシステムでは、コマンドはzgrep -c $ filename.gz
Ravi KM

1
これはzcat + wcよりも優れていると直感的に思うかもしれませんが、時間を計ると、同じ時間がかかります。
ngọcminh.oss

1

正確なカウントではなく大まかな見積もりで問題がなく、実際にファイル全体を抽出するか、行末に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)データが行ごとにかなり均一である限り、おおよその行数はです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.