如果我有一个 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)
,只要每行的数据相当均匀。