在一个巨大的日志文件(> 14 GB)中只有最后的 x GB?

在一个巨大的日志文件(> 14 GB)中只有最后的 x GB?

我需要在大型日志文件(超过 14 GB)中搜索某些内容。我确信它位于最后 4 GB 左右。

有没有办法跳过前 X GB 来加快速度?

答案1

我想你可以用尾巴使用开关只输出最后 4GB-c左右

-c, --bytes=[+]NUM
输出最后 NUM 个字节;或者使用 -c +NUM 从每个文件的字节 NUM 开始输出

你也许可以做点什么也可以通过设置bs=1skip设置为您想要启动的偏移量,例如

dd if=file bs=1024k skip=12g | grep something

答案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稍微短了一点。

注意:使用的后缀gG命令而异(Ubuntu 15.10)

答案3

这并不能回答标题问题,但它可以完成您想要做的事情。使用 tac 反转文件,然后使用 grep 查找您的字符串。如果您的字符串在文件中仅出现一次或已知次数,则让它运行直到找到已知次数。这样,​​如果您对它在文件中的位置的假设不正确,它仍然会找到它。如果您确实想限制它,您可以使用 head 来做到这一点。head 命令将位于 tac 和 grep 之间。

因此命令如下:

tac < logfile | grep myString

相关内容