Shell-Script
根據寫入行的時間切割文件片段
我有一個始終執行的程序,日誌文件可能達到 5 giga,有時我必鬚根據時間間隔(通常我使用 dd)截取這個日誌的片段。linux中是否有任何命令可以根據時間間隔獲取日誌片段?
PS:此日誌中的大多數行都沒有時間戳。
如果沒有允許您執行的命令(如 Wiese 建議的那樣),您為什麼不創建文件的外部索引?
只是這個想法:你可以做一個永遠執行的腳本(或者幾乎見下面的註釋),並給出創建索引的時間間隔。
PIDofThisInstance=$$ # ... you code for the header, checks... while true ; do # This is the core of your cycle sync # Maybe CurrentSize=`ls -s $MyFile | awk '{print $1} ' ` CurrentTime=`date +"%Y%m%d%H%M%S"` echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File sleep $TimeToSleep # if (exit-condition) # then # break #Exit from the infinite loop. # fi done
在您可以執行另一個給出開始/結束日期/時間的腳本之後,您可以使用開始/結束大小來回答您。從這些數字中,您可以剪切您的文件。
你說這是一個巨大的文件。所以我不建議你用linenumbers和也許
head MyFile.log -n xxx | tail -n yyy
. 會很長。更好地使用尺寸。筆記:
- 如果這是一個帶有格式化輸出的日誌(即使你不知道),它總是有可能存在來自開發公司/程序員的一些分析工具。即使多年後它也有可能出現。恕我直言,最好不要觸及該格式並創建一個單獨的文件。
- 如果您知道生成日誌的程序的 PID,請寫入您的腳本參數,例如目前 PID(以防您需要手動殺死)、文件名(日誌記錄的對象)…
- 如果您遇到以下情況,則循環可以是永遠或結束:生成日誌的程序的 PID 不再存在,文件不再存在,實際大小比舊的小(您移動您需要重新啟動索引的文件或重新啟動日誌)。
- 如果您將 $LastSize 保存在記憶體中,您可以決定避免在不需要時在“日誌的日誌”中列印行,或者在長時間沒有活動的情況下停止(或動態修改時間間隔……)