计算压缩文件中的行数


Answers:


60

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

但是您可以解压缩为流,并计算该流中的换行符,而无需将(解压缩的)文件写入磁盘。那将是这样的:

zcat file.gz | wc -l

zcat用于解压缩&cat,wc用于wordcount。如果您想了解更多信息,请参见手册页。

编辑

如果您没有zcat,则zcat只是的别名gunzip -c


7
gzipcompress您不同的Unices上,您想要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 2015年

2

使用以下命令:

gzgrep -c $ filename.gz

该命令的gzgrep行为与grepgzip压缩文件相同。它会为正则表达式匹配动态地解压缩文件。

在这种情况下,请-c指示命令输出匹配的行数,并且正则表达式$匹配行尾,因此它匹配每一行或文件。

最终结果与相同gzip -dc filename.gz | grep -c $


是否gzgrep可用在其他系统上的Solaris相比?
pabouk

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)只要您的数据每行相当均匀,则近似的行数为。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.