计算压缩文件中的行数

计算压缩文件中的行数

如果我有一个 unix 上的 .gz 文件,其中包含一定数量的行。如何在不解压的情况下计算 unix 上的行数。

答案1

如果文件仍然被压缩,则显然不能计算换行符。

但是你可以解压缩到一个流,并计算该流中的换行符,而无需将(解压缩的)文件写入磁盘。具体操作如下:

zcat file.gz | wc -l

zcat 用于解压缩和 cat,wc 用于字数统计。如果您想了解更多信息,请参阅两者的手册页。

编辑

如果您没有 zcat,zcat 只是 的另一个名称gunzip -c

答案2

这似乎也有效 - grep 文件中的行尾数

zgrep -Ec "$" file.gz

答案3

如果您想快速完成此操作,我建议使用“pigz”(IIRC 代表“GZip 的并行实现”)。我刚刚遇到过类似的情况,我想计算一堆 gzip 文件中的行数,这是我的解决方案:

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

它使用 8 个处理器,以交替行的形式给出了行数和文件计数。它运行得很快!

答案4

如果您对粗略估计而不是精确计数感到满意,并且实际提取整个文件或对其进行 zgrepping 以查找行尾都会花费太长时间(这是我刚才的情况),您可以:

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

那么近似的行数就是1000 * (size of $file) / (size of 1000-line-sample),只要每行的数据相当均匀。

相关内容