2013-05-29 34 views
2

標題說明了一切。 我有4個awk進程記錄到同一個文件,並且輸出看起來很好,沒有損壞,但我不確定只是重定向print這樣的輸出:每個進程中的print "xxx" >> file是正確的方式來做到這一點。從多個進程寫入同一文件的正確方法awk

網站上有很多類似的問題,但這個問題特別關於awk和解決問題的實用,代碼正確的方法。

編輯

對不起鄉親,當然我不是「只是重定向」像我寫的,我被追加。

回答

3

不,它不安全。

awk print "foo" > "file"將打開文件並覆蓋文件內容,直到腳本結束。

也就是說,如果您的4個awk進程在不同的時間開始寫入同一個文件,它們會覆蓋彼此的結果。

要重現它,你可以啓動兩個(或更多)的awk這樣的:

你監控 file內容
awk '{while(++i<9){system("sleep 2");print "p1">"file"}}' <<<"" & 
awk '{while(++i<9){system("sleep 2");print "p2">"file"}}' <<<"" & 

和同一時間,你會看到最後是不正是8「P1」和8「p2」。使用>>可以避免輸入項的丟失。但是來自4個進程的輸入序列可能會混亂。

EDIT

確定,>是一個錯字。

我不知道爲什麼你真的需要4個進程寫入同一個文件。正如我所說的,與>>,條目不會丟失(如果你awk腳本正常工作)。不過,我個人不會這樣做。如果我必須有4個進程,我會寫入不同的文件。以及我不知道你的要求,只是一般來說。

輸出到不同的文件使測試,調試更容易..想象當你的一個進程有問題,你想解決它。 etc ...

+0

我在追加,謝謝你讓我注意到我寫錯了問題! – blue

+0

檢查編輯信息 – Kent

1

我認爲使用操作系統打印命令是保存。實際上,這會將您提供的字符串作爲日誌附加到文件寫入緩衝區。因此,系統將處理數據到光盤的實際寫入過程,而且如果另一個進程要使用同一個文件,系統將會看到該資源已經被聲明並等待第一個線程完成其處理,第二個進程寫入緩衝區。

相關問題