【问题标题】:Printing line number modulo 1000000打印行数模 1000000
【发布时间】:2011-10-31 20:21:55
【问题描述】:

我正在使用grep 处理一个非常 大的压缩文件。

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

我想为处理的每一百万左右的输入行打印一些内容到stderr,只是为了跟踪进度。有什么想法吗?

【问题讨论】:

    标签: linux unix command-line


    【解决方案1】:

    试试pv。它默认为字节,但有一个开关可以使其变为行。

    【讨论】:

    • 没有zpv我知道,但是由于pv处理二进制数据,你可以切换它和zcat:pv infile[s] | zcat | grep...,因为它可以知道文件的大小,你应该得到一个确定的进度条和一个相当准确的 ETA。
    【解决方案2】:

    将 grep 替换为:

    perl -ne '打印如果 /pattern/;打印标准错误“。”如果 $。 % 1000000 == 0'

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案4】:

        mbuffer(1) 工具可能适合您。引用一些摘要:

        mbuffer 工具用于缓冲数据流并显示 I/O 速率和 总结给用户。它对于将备份写入到 快速磁带驱动器或通过网络流式传输它们。如果使用得当, 它可以防止缓冲区不足并加快整个备份或 转移过程。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-19
          • 2021-05-23
          • 2013-06-21
          • 1970-01-01
          • 2018-10-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多