2016-01-13 48 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是你的記錄。