下午的时候有个同学问:
他们服务器有一个5G的日志文件,如何从中截取出
10.5-11.18的日志另一个文件
日志文件有规范的时期格式,类似于web服务器日志。
相关问题:
对于cat grep这类linux命令,如果操作一个大文件
会不会占用很大的内存?
人生最曼妙的风景,竟是内心的淡定与从容!
用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同學所說,上長期運行的服務時,就要提前做好日誌切割相關的工作。
5G的文件性能上不會有什麼問題,這樣的文件處理上幾分鍾是可以接受的,也就是一些小的優化了,能用fgrep就不用grep。再不行就split切割文件,反正時間戳是遞增的,每次讀文件第一行和最後一行用二分確定需要的時間戳在的文件,意義也不是很大。
5G對於四路至強服務器不算什麼, 幾分鍾的事情。 不行就split過後在提取。。 不過還是建議要提前做好日誌切割, 這樣子下去是不行的。
用sed好了,sed是按行處理的,不會將整個文件加載到內存中,可以放心使用
要切出從2012-02-09到2012-09-10的所有數據行,(假設你的日誌文件以yyyy-MM-dd的日期格式開頭)隻需要:
無論怎麼樣你都必須使用某一個程序把這個文件讀出來,並且用一定的規則來加以過濾。在Linux中,使用cat和grep對文件進行操作已經可以說是最經濟合理的了。占用一定的係統資源是肯定的,具體的話跟你使用的cat,grep以及linux內核都有一定關係,所以可能會略有不同。一般不要在係統裏出現那麼大的日誌文件,最好在一開始就做好日誌的大小限製以及合理的日誌轉儲和備份。
grep不會占很多內存的,不過在操作期間,這個文件會有很大一部分被OS緩存,你用free命令可以看出cached這一欄的數字顯著增大,但不影響係統的可用內存數。
5g大小的文件截取很快的,偶爾過幾次,對服務器壓力不會很大。
不過如@xinsnake同學所說,上長期運行的服務時,就要提前做好日誌切割相關的工作。
5G的文件性能上不會有什麼問題,這樣的文件處理上幾分鍾是可以接受的,也就是一些小的優化了,能用fgrep就不用grep。再不行就split切割文件,反正時間戳是遞增的,每次讀文件第一行和最後一行用二分確定需要的時間戳在的文件,意義也不是很大。
5G對於四路至強服務器不算什麼, 幾分鍾的事情。 不行就split過後在提取。。 不過還是建議要提前做好日誌切割, 這樣子下去是不行的。