如何写入文件,在文件仍在写入的同时,使用shell脚本读取并parsing其内容?

我实际上正在编写一个shell脚本,将命令的输出logging到文件中,但是由于该命令需要很长时间才能完成(大约15分钟),所以我想开始分析命令的输出(内容)在命令完成之前,所以我可以发送消息到标准输出(用户),如:

10% complete 45% complete 

等等。

程序步骤

  1. 将命令redirect到一个文件:$(command)> $ FILE
  2. 在命令完成之前开始读取和parsing输出($ FILE)。

我想过使用并行编程,但我还没有掌握它。

我实际上已经解决了这个问题,使用tail和堆栈溢出问题结束尾部-f开始在一个shell脚本

 # Solution ($(command) > ${FILE}) & tail -f --pid=$! ${FILE} | while read line do echo $line # Can parse each line output here # Example: send errors to log file if echo $line | grep -qi "error" then echo $line >> ${LOG} fi done 

谢谢大家的帮助。

tail -f将在创build时跟随文件。

尝试一个日志文件。

例如,tail -f / var / log / messages。

您将看到日志文件输出到日志中显示的控制台。

pipe道,三通和尾巴(tee是问题的核心,因为它重复了标准输出。如果sed是你用来parsing数据的文件,一个例子是:

 kbrandt@k$ a=0; while [[ a -lt 10 ]]; do > echo foo; a=$(( $a + 1)); > done | tee -a unprocessed | sed 's/foo/bar/' > processed kbrandt@kbrandt$ cat unprocessed foo foo foo ... kbrandt@kbrandt$ cat processed bar bar ... 

然后,您可以将其作为作业运行并尾部处理,或者在另一个窗口中tail -f processed

使用tail和pipe到你的parsing器中。