【发布时间】:2011-10-31 20:21:55
【问题描述】:
我正在使用grep 处理一个非常 大的压缩文件。
zcat blah.gz | grep -e pattern | gzip -c > pattern.gz
我想为处理的每一百万左右的输入行打印一些内容到stderr,只是为了跟踪进度。有什么想法吗?
【问题讨论】:
标签: linux unix command-line
我正在使用grep 处理一个非常 大的压缩文件。
zcat blah.gz | grep -e pattern | gzip -c > pattern.gz
我想为处理的每一百万左右的输入行打印一些内容到stderr,只是为了跟踪进度。有什么想法吗?
【问题讨论】:
标签: linux unix command-line
试试pv。它默认为字节,但有一个开关可以使其变为行。
【讨论】:
zpv我知道,但是由于pv处理二进制数据,你可以切换它和zcat:pv infile[s] | zcat | grep...,因为它可以知道文件的大小,你应该得到一个确定的进度条和一个相当准确的 ETA。
将 grep 替换为:
perl -ne '打印如果 /pattern/;打印标准错误“。”如果 $。 % 1000000 == 0'【讨论】:
通过 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
【讨论】:
mbuffer(1) 工具可能适合您。引用一些摘要:
mbuffer 工具用于缓冲数据流并显示 I/O 速率和 总结给用户。它对于将备份写入到 快速磁带驱动器或通过网络流式传输它们。如果使用得当, 它可以防止缓冲区不足并加快整个备份或 转移过程。
【讨论】: