2016-12-06 114 views
1

我有大型日志文件300-500兆,并且需要在其中进行搜索。我目前正在使用PHP代码中的grep来做这件事,但我想进一步优化代码。 我需要的数据始终在文件的最后10000行内,所以我希望搜索从结尾开始并向前移动,直到找到模式并停止。grep从文件末尾搜索

我发现一些信息,tac可以做到这一点,但我的性能测试显示,使用tac是4倍慢。 目前我的搜索需要大约0.13秒才能完成,添加tac需要0.50秒。我觉得我失去了一些东西,我会很感激帮助。

我的期望是,如果我正确地从文件中读取文件,这将大大提高进程的速度。

这里是代码,它包括定时器

<?php 
exec('grep -r "search var" file.log -b | head -1', $result); 
echo $result[0]; 

$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; 
echo "<br>".$time; 
?> 
+4

http://unix.stackexchange.com/a/112173 –

回答

1

可避免与grep-r标志。你只想在最后的10000行内搜索对吗?所以直接tail it和grep的模式。

tail file.log -n 10000 | grep "search var" 
+0

1000行代码看起来是解决方案。我对350meg文件的初始测试结果为0.0045490秒。我不认为文件大小会带来很大的差异。我将在下一次构建中使用该方法,并让您知道它是如何工作的。非常感谢 –

+0

这个解决方案工作得非常好,谢谢 –