我有一个 70G+ 日志文件,我想要符合模式的最新条目(apache 日志在末尾附加新项目)。我可以:
run grep | tail
或者
run tail | grep
选项 1 会花很长时间。选项 2 可能什么也不会返回,那么我必须增加 tail 的计数并继续运行直到得到结果。
如果我可以从最后一行到第一行执行 grep,那就太理想了。但我在 grep 的手册页上找不到任何选项。
有什么技巧可以做到这一点吗?单独使用 grep 还是与任何其他 Linux 工具组合?
答案1
我认为对您最有帮助的命令是 tac:http://linux.die.net/man/1/tac
正如它所述:
tac - 反向连接和打印文件
因此,您可以将其通过管道传输到 grep 并匹配 nnn 行然后才停止,或者类似的事情。
答案2
这是一个很大的文件。您应该更频繁地轮换这些日志。
如果tac
太慢,您可以选择一种带有seek
命令的编程语言(例如 perl),然后:
- 打开文件
- 寻找到底
- 迭代地:
- 向后搜索一定量(4K,或更大)
- 阅读那么多的文字
- 按换行符分割,然后搜索任意内容。