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


14

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

该日志文件非常大,大约为1GB,谁知道最后一个CR和/或LF插入了多长时间。我怎样才能说例如最后2MB?

Answers:


27

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

tail -c 2097152 myapp.log

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

tail -c 2m myapp.log

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


5
尾部应该能够接受以数字为单位的数字作为c开关的参数,因此它tail -c 2M myapp.log也应该起作用。
彼得·乌泽尔

@PetrUzel:谢谢。编辑答案以添加它。
Birei 2012年

现在我觉得很愚蠢:)感谢您的及时性,非常感谢。很棒的建议!
jwbensley,2012年

1
完美,不确定是否会有所帮助,但我将添加此文本字符串,因为这就是我要搜索的关键字(需要花很长时间):“两个字节位置(不是行)之间的猫文件数据“
2014年
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.