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

下午的时候有个同学问:

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

10.5-11.18的日志另一个文件

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

相关问题:

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

会不会占用很大的内存?

黄舟
黄舟

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

reply all(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过后在提取。。 不过还是建议要提前做好日志切割, 这样子下去是不行的。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!