如何减少大型日志文件的查找速度?


15

我经常处理非常大的日志文件(> 3 GB)。我注意到这些文件的性能差强人意。通常,我想跳转到文件的中间,但是当我告诉更少向前跳转1500万行时,它需要几分钟。

我想象的问题是,很少需要扫描文件中的'\ n'字符,但这花费的时间太长。

有没有一种方法可以使其仅寻求明确的补偿?例如寻求字节偏移文件中的15亿。此操作应快几个数量级。如果少则不能提供这种能力,那么还有其他工具可以做到吗?


如果您正在浏览文件中的禁止字符,是否可以合理地假设您在找到上述字符后将其清除?如果是这样,我可以提供perl -pi -e 's/\n//g;' <filename>
Mike Pennington

抱歉,撇开是错误的单词。应该使用过扫描。设计扫描换行符(\ n)的次数更少。扫描大文件需要花费很长时间。
UsAaR33

Answers:


21

你可以减少这样的行数 less -n

要跳到某个特定位置,例如说进入50%,less -n +50p /some/log这对我来说是1.5GB日志文件。

编辑:对于特定的字节偏移量: less -n +500000000P ./blah.log


1
行计数从来不是问题。我可以只使用escp / ctrl-c。但这是实际的答案。P跳到特定的字节偏移!
UsAaR33

5

作为寻呼机,Less本质上是面向行的。启动时,如果文件很大,则会显示“ counting line number”(计数行号),然后按ESC停止它,否则,它将执行行数。这就是它的作用。

如果您想直接跳到文件的中间并跳过开头,则始终可以搜索开头。我会做类似的事情tail -c +15000000 /some/log | less


3
您的意思是tail -c ...或者您有一个奇怪的last命令。
艾伦·库里

这种策略的问题是,您无法再从更少的内容中搜索整个文件了(搜索特定消息等)
Sekenre 2012年

@AlanCurry:这只是一个替代的拼写... <咧嘴>
womble

0

less 似乎在区域设置中开销很小

如果您仅使用ASCII字符,则可以使用以下命令来加快速度:

LC_ALL=C less big-log-file.log

就我而言,吞吐量从〜30M ib / s增加到〜50 Mib / s(速率受CPU限制)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.