linux - 如何高效安全地从一个大文件中截取部分信息
黄舟
黄舟 2017-04-17 11:05:05
0
5
842

下午的时候有个同学问:

他们服务器有一个5G的日志文件,如何从中截取出

10.5-11.18的日志另一个文件

日志文件有规范的时期格式,类似于web服务器日志。

相关问题:

对于cat grep这类linux命令,如果操作一个大文件

会不会占用很大的内存?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(5)
刘奇

用sed好了,sed是按行處理的,不會將整個文件加載到內存中,可以放心使用
要切出從2012-02-09到2012-09-10的所有數據行,(假設你的日誌文件以yyyy-MM-dd的日期格式開頭)隻需要:

sed -n '/^2012-02-09/,/^2012-09-10/p' whole.log > part.log
阿神

無論怎麼樣你都必須使用某一個程序把這個文件讀出來,並且用一定的規則來加以過濾。在Linux中,使用cat和grep對文件進行操作已經可以說是最經濟合理的了。占用一定的係統資源是肯定的,具體的話跟你使用的cat,grep以及linux內核都有一定關係,所以可能會略有不同。一般不要在係統裏出現那麼大的日誌文件,最好在一開始就做好日誌的大小限製以及合理的日誌轉儲和備份。

阿神

grep不會占很多內存的,不過在操作期間,這個文件會有很大一部分被OS緩存,你用free命令可以看出cached這一欄的數字顯著增大,但不影響係統的可用內存數。

5g大小的文件截取很快的,偶爾過幾次,對服務器壓力不會很大。

不過如@xinsnake同學所說,上長期運行的服務時,就要提前做好日誌切割相關的工作。

PHPzhong

5G的文件性能上不會有什麼問題,這樣的文件處理上幾分鍾是可以接受的,也就是一些小的優化了,能用fgrep就不用grep。再不行就split切割文件,反正時間戳是遞增的,每次讀文件第一行和最後一行用二分確定需要的時間戳在的文件,意義也不是很大。

大家讲道理

5G對於四路至強服務器不算什麼, 幾分鍾的事情。 不行就split過後在提取。。 不過還是建議要提前做好日誌切割, 這樣子下去是不行的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板