如何 tail/grep/awk 文件的最后 N 个字节,而不是行

如何 tail/grep/awk 文件的最后 N 个字节,而不是行

我有一个正在记录到纯文本日志文件(myapp.log)的应用程序,但它似乎没有在每个日志条目的末尾写入新行字符。如果我执行一个命令,就像tail -n 50 myapp.log我实际上收到了数百“行”文本(日志条目)。

这个日志文件非常大,大约 1GB,谁知道最后一次 CR 和/或 LF 是在多久前 inserterd 的。例如,我如何才能抓取最后 2MB?

答案1

使用-c开关(2MB = 2 * 1024 * 1024 = 2097152 字节):

tail -c 2097152 myapp.log

谢谢彼得·尤泽尔的建议。一些尾部实现允许添加一个单位来打印最后的千字节(k)或兆字节(m),例如:

tail -c 2m myapp.log

但请注意,它不是标准的(在 POSIX、UNIX (SUS) 或 Linux (LSB) 中都不是)并且不可移植。另请注意,由于术语“Mega”/“kilo”...及其缩写(M、k...)具有不明确的含义(1000 vs 1024),因此无法保证这个或那个实现的tail含义2m(尽管支持它的当前实现的当前版本似乎适用于 1024 变体)。

相关内容