将管道内容输出到文件并在标准输出上显示文件中的行数

将管道内容输出到文件并在标准输出上显示文件中的行数

我想使用tee管道将内容分别从stdout文件stderr传输到文件中(实际上将其附加到文件中> >(tee -a $filename))。但是,我不想看到附加到文件中的内容,而是希望有一些真实的基于管道内容的进度指示器。到目前为止,各个通道的输出中的行数,或者字符数或类似的数量。

注:为什么我要强调真实的多于?因为我知道如何通过后台的子 shell 获取旋转警棍,然后通过存储其 PID 来杀死它。这是一个很令人感动的东西,但并没有真正提供任何关于正在发生的事情的迹象——也就是说,它是万金油。

顺便说一句:一开始输出文件可能不存在,因此任何具有子 shell 的解决方案都必须考虑这一点。

答案1

my-program > >(pv -trabcN stdout > stdout) 2> >(pv -trabcN stderr > stderr)

会给你一个进步,如:

  stderr:  123MiB 0:00:03 [42.6MiB/s] [41.1MiB/s]
  stdout:  138MiB 0:00:03 [54.2MiB/s] [46.2MiB/s]

(当前(-r)和平均(-a)速度。是相对较新的,如果您的版本没有它,-a可以忽略它)。pv

答案2

命令 tail 的 -f(永远)选项可能很有用。

为文件的每一行发出一个点:

tail -f bk2ud.log | awk '{printf(".");}'

然而,根据您的需要,您可能会追求更复杂的东西。

相关内容