1
我想知道是否有更好的方法來分割日誌文本文件,而不是在下面執行shell循環,理想情況下是使用單個shell命令。Linux shell命令拆分日誌文件
日誌文件看起來像這樣:
2016-11-20T16:19:21+00:00 Logging started
2016-11-20T16:20:41+00:00 System is up
2016-11-20T16:21:07+00:00 Unknown event 45
...
2016-11-25T08:40:00+00:00 Blah blah
2016-11-25T08:42:00+00:00 Blah blah
...
2016-11-27T11:32:00+00:00 System powering down
- 所有行開始與ISO8601日期標記(UTC)
- 的線是按時間順序排列,由建設,因爲線路被追加時有一個事件要記錄。
- 文件越來越大
所以,我們要完成的任務是將文件在給定時間分割。 假設我只保留最後一週的條目以避免日益增長的綜合徵。
因此,有一個日期'2016-11-25T08:41:00 + 00:00',我希望只保留那些日期後的條目。 請注意,我們想要剪切文件的日期不必與現有條目相對應(如示例中所示)。
所以,我能做的最好的是一段代碼那樣:
WHEN='2016-11-25T08:41:00+00:00' # actually that is read as a parameter
while read line; do
if [ "${line}" \> "${WHEN}" ]; then
echo "${line}"
fi
done <"${LOGFILE}" >"${CUTFILE}"
這樣的作品,但因爲它是一個shell循環,如果該文件變得非常大的可能是緩慢的。
因此,任何更好的建議與標準的命令/工具?
您可以使用'awk'嗎? – Inian
不要重新發明車輪。使用['logrotate'](http://www.linuxcommand.org/man_pages/logrotate8.html)。它有很多有趣的選項,例如壓縮文件並將文件移動到「舊」日誌,郵件等目錄。它會評估日誌的大小,時間(旋轉的頻率),但不評估文件內容。我認爲你甚至不需要後者。 –
確實Ruslan,我需要的是完全logrotate +文件內容! – Zakhar