我经常处理非常大的日志文件(>3 GB)。我注意到 less 处理这些文件的性能非常糟糕。我经常想跳到文件的中间,但当我告诉 less 向前跳 15 M 行时,它需要几分钟。
我想象的问题是 Less 需要扫描文件以查找“\n”字符,但这需要太长时间。
有没有办法让它只寻找一个明确的偏移量?例如,寻找文件中 15 亿个字节的偏移量。此操作应该快几个数量级。如果 less 不提供这样的能力,还有其他工具可以吗?
答案1
你可以通过像这样计算行数来阻止less -n
要跳转到特定位置,比如说 50%,less -n +50p /some/log
这对于 1.5GB 日志文件来说是即时的。
编辑:对于特定的字节偏移:less -n +500000000P ./blah.log
答案2
Less 是一款分页程序,本质上是面向行的。启动时,如果文件很大,它会提示“计算行数”,然后按 ESC 键停止,否则,它会计算行数。这就是它的作用。
如果你想直接跳到文件中间并跳过开头,你可以直接寻找开头之后的部分;我会做类似的事情tail -c +15000000 /some/log | less
。
答案3
less
似乎从区域设置中获得了一点开销
如果您仅使用 ASCII 字符,则可以使用以下命令加快速度:
LC_ALL=C less big-log-file.log
在我的例子中,吞吐量从~ 30M ib/s 增加到~ 50 Mib/s(速率受 CPU 限制)