如何读取巨大日志文件的最后几行?

如何读取巨大日志文件的最后几行?

我有一个 55GB 大小的日志。

我试过:

cat logfile.log | tail

但这种方法需要花费很多时间。有没有办法更快地读取大文件或任何其他方法?

答案1

cat logifle.log | …这是多余的,实际上会导致速度变慢。tail logfile.log没有猫会更有意义!

它会快得多,因为当输入不是可寻找的tail需要做的是逐行读取所有标准输入,将最后 10 行保留在缓冲区中(以防它们应该是最后的10 行);并且让输入来自通过cat机制的管道,确保它不可查找。

这很慢,除非文件中的一行可以有 GB 大小,否则非常愚蠢:只需跳过前 54.9 GB。剩下的100MB肯定不会少于最后10行!从 100 MB 中获取最后 10 行应该足够快了。

tail --bytes 100M logfile.log | tail

然而,如果您使用的是 GNU Coreutil1 的tail实现,那么它已经做到了这一点(即,它会查找文件末尾减去 2.5 kB 的内容,并从那里开始查找)。经过不是在这里滥用cat但让tail读取文件本身(或者只是使用重定向,效果是一样的!),您会得到更快的结果。


tail1 GNU Coreutils、现代 busybox 是我检查过的两个实现;两者都这样做。 Stéphane 在下面指出,即使是原来的20 世纪 70 年代 PWB Unix 实施做到了这一点——但这仍然只是一个实现细节。

答案2

您应该直接使用tail logfile来获取文件的最后十行,而不是像cat logfile | tail现在这样读取所有文件。

答案3

tail -nX path to your log file

对于 X,使用您想要读取的行数。

例子

tail -n30 /var/log/syslog

显示我的 /var/log/syslog 的最后 30 行

答案4

您可以使用tac,这是cat向后的。但不要这样做,因为很难将其限制为 10 行。请使用tail它,因为这就是它的用途。

相关内容