grep从文件末尾搜索
我有大型日志文件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;
?>
可避免与grep
的-r
标志。你只想在最后的10000行内搜索对吗?所以直接tail
it和grep
的模式。
tail file.log -n 10000 | grep "search var"
1000行代码看起来是解决方案。我对350meg文件的初始测试结果为0.0045490秒。我不认为文件大小会带来很大的差异。我将在下一次构建中使用该方法,并让您知道它是如何工作的。非常感谢 –
这个解决方案工作得非常好,谢谢 –
http://unix.stackexchange.com/a/112173 –