2016-01-13 94 views
6

我试图做的是:如何将进程的输出管道输出到记录器命令和头部命令?

  • 开始输出文本汽车无

  • 管一个过程,输出到两个命令:

    1. 记录程序脚本
    2. “头'命令,所以我可以保存第一行的初始过程输出。

我试过到目前为止(unsuccessfuly)什么是:

./myProgram | tee > (myLogger log.txt) | head > firstLines.txt

的问题是myProgram退出尽快head完成。

即使我在tee命令中使用-i命令,我也无法让myProgram继续运行。

由于记录器可能会将传入文本附加到现有文件,因此在这种情况下执行 head log.txt > firstLines.txt 将不起作用。

+1

开关顺序各地。使用'>(...)'作为'head'和你的记录器的普通管道? –

+0

这也是我的第一个猜测,但我尝试过,问题依然存在。 –

+0

没有那么优雅的解决方案: 输出到一个临时文件,然后将该临时文件追加到log.txt,然后临时文件头,然后删除临时文件 – Bartez

回答

1

可以使用awk作为替代一举两得:

./myProgram | 
    awk 'NR<=10{print > "firstLines.txt"} NR>10{close("firstLines.txt")} 1' > log.txt 
+1

击败你8秒 - 什么让你? ;-) –

+1

lol :)是的,我知道,迟到了这个线程。 – anubhava

+1

完美无瑕!谢谢! – Stefano

1

喜欢这也许:

yes | awk 'FNR<4 {print >>"file"; close("file")} 1' | more 

其中yes是你的程序,file是你送的head的输出,并more是你的记录。