Rog*_*ger 34 linux log-files grep
我需要在一个巨大的日志文件(超过 14 GB)中搜索一些东西。我很确定它在最后 4 GB 左右。
有没有办法跳过第一个 X GB 来加快速度?
use*_*517 75
我想您可以使用tail仅通过使用-c开关输出最后 4GB 左右
-c, --bytes=[+]NUM
输出最后 NUM 个字节;或使用 -c +NUM 以每个文件的字节 NUM 开头输出
您也可以通过设置和ing 到您想要开始的偏移量来使用dd做一些事情,例如bs=1skip
dd if=file bs=1024k skip=12g | grep something
Run Code Online (Sandbox Code Playgroud)
Rog*_*ger 32
我只是发布这个,因为一些评论要求它。
我最终使用的是(15 GB 文件)。它工作得非常快,为我节省了大量时间。
tail -f -c 14G file | grep something
Run Code Online (Sandbox Code Playgroud)
我还在同一个文件上做了一个非常基本的基准测试。我测试过:
grep xxx 文件
// 需要永远(> 5 分钟)dd if=file bs=1 跳过=14G | grep xxx
// 非常快 < 1 秒尾-c 14g | grep xxx
// 相当快 < 2 秒
的tail是只是有点短。
注意:使用的后缀因命令g而G异(Ubuntu 15.10)
小智 19
这不会回答标题问题,但它会做你想做的事。使用 tac 反转文件,然后使用 grep 查找您的字符串。如果您的字符串在文件中只出现一次或已知次数,则让它运行,直到找到已知出现次数。这样,如果您对文件中位置的假设不正确,它仍然会找到它。如果你想限制它,你可以使用 head 来做到这一点。head 命令将在 tac 和 grep 之间进行。
所以命令看起来像:
tac < logfile | grep myString
Run Code Online (Sandbox Code Playgroud)