2011-10-31 74 views
3

我有一个非常我正在使用grep处理大型压缩文件。打印行号模1000000

zcat blah.gz | grep -e pattern | gzip -c > pattern.gz 

我想打印的东西stderr为每处理万条左右输入线,只是为了跟踪进度。有任何想法吗?

回答

4

尝试pv。它默认为字节,但有一个开关来使它成为线。

+0

...干杯! ......现在我只希望有一个'zpv'。 – badroit

+0

没有'zpv'我知道,但是因为'pv'与二进制数据一起工作,您可以切换它和'zcat':'pv infile [s] | zcat | grep ...',并且因为它可以告诉文件的大小,你应该得到一个确定的进度条和一个相当准确的ETA。 – Kevin

4

更换的grep有:

 
perl -ne 'print if /pattern/; print STDERR "." if $. % 1000000 == 0' 
1

mbuffer(1)工具可能是东西给你。引用一些摘要:

mbuffer工具用于缓冲数据流并向用户显示I/O速率和摘要。这对于将备份写入 快速磁带驱动器或通过网络进行流式传输尤其有用。如果使用得当, 它可以防止缓冲区欠载并加速整个备份或传输过程。

3

运行它通过AWK:

zcat blah.gz | awk 'BEGIN {x = 1}; {if ((x++ % 1000000) == 0) print x " " $0 > "/dev/stderr"; print $0 }' | grep -e pattern | gzip -c > pattern.gz