我需要在大型日志文件(超过 14 GB)中搜索某些内容。我确信它位于最后 4 GB 左右。
有没有办法跳过前 X GB 来加快速度?
答案1
答案2
我发布此信息只是因为一些评论要求这样做。
我最终使用的是(15 GB 文件)。它运行非常快,为我节省了大量时间。
tail -f -c 14G file | grep something
我还对同一个文件进行了非常基本的基准测试。我测试了:
grep xxx 文件
// 花费很长时间 (> 5 分钟)dd if=file bs=1 skip=14G | grep xxx
//非常快 < 1 秒tail -c 14g | grep xxx
// 非常快 < 2 秒
只是tail
稍微短了一点。
注意:使用的后缀g
因G
命令而异(Ubuntu 15.10)
答案3
这并不能回答标题问题,但它可以完成您想要做的事情。使用 tac 反转文件,然后使用 grep 查找您的字符串。如果您的字符串在文件中仅出现一次或已知次数,则让它运行直到找到已知次数。这样,如果您对它在文件中的位置的假设不正确,它仍然会找到它。如果您确实想限制它,您可以使用 head 来做到这一点。head 命令将位于 tac 和 grep 之间。
因此命令如下:
tac < logfile | grep myString