tail f 過濾結果實時輸出重定向到檔案

2021-10-10 14:22:35 字數 567 閱讀 3158

需求描述:

問題分析:

咋一看,似乎是乙個很簡單的問題,就是 taif -f | grep 過濾出來的內容重定向到檔案中就行了,但是為什麼檔案一直為空呢?

其實這要從shell的輸出機制說起,因為標準輸出到終端時預設行緩衝或無緩衝,重定向到硬碟之後,就變成了全緩衝。

因此 tail -f 往終端列印,和往檔案中寫是不一樣的,往檔案中寫,需要先寫到pipe的緩衝區中, 然後再寫到檔案中。tail -f 之後表示乙個流還沒有完成, 緩衝區不會自動寫,因此導致內容無法寫入檔案。

解決方法呢?很簡單,既然緩衝區不自動寫,那我們就強制寫。方法不止一種,此處我們單講 fflush:

fflush是乙個在c語言標準輸入輸出庫中的函式,功能是沖洗流中的資訊,該函式通常用於處理磁碟檔案。fflush()會強迫將緩衝區內的資料寫回引數stream 指定的檔案中。

tail -f ***.log | awk '/china|beijing/ ' >> out.txt

tail f與tail F的區別

tail f 等同於 follow descriptor,根據檔案描述符進行追蹤,當檔案改名或被刪除,追蹤停止 tail f 等同於 follow name retry,根據檔名進行追蹤,並保持重試,即該檔案被刪除或改名後,如果再次建立相同的檔名,會繼續追蹤 tailf 等同於tail f n 10...

tail f 和tail F的區別

flume抓取 exec 的command 官網有如下建議 以下內容來自 tail f,當檔案被刪除或移走後,即使重新建立的檔案也不會再出現新檔案內容。如下 第乙個視窗 root cftest2 tail f messages.3 helll test2 第二個視窗 root cftest2 rm ...

tail F和tail f的區別

tail help的解釋 tail f 等同於 follow descriptor,根據檔案描述符進行追蹤,當檔案改名或被刪除,追蹤停止 tail f 等同於 follow name retry,根據檔名進行追蹤,並保持重試,即該檔案被刪除或改名後,如果再次建立相同的檔名,會繼續追蹤 備註 一般生產...