尝试调试服务器的问题时,我唯一的日志文件是一个20 no的日志文件(甚至没有时间戳!为什么人们使用System.out.println()
作为日志记录?在生产中?!)
使用grep,我找到了文件中想要查看的一个区域,第347340107行。
除了做像这样的事情
head -<$LINENUM + 10> filename | tail -20
..。这将需要head
读取日志文件的前3.47亿行,有没有快速而简单的命令可以将347340100 - 347340200行(例如)转储到控制台?
update我完全忘了grep可以打印匹配周围的上下文...这样做效果很好。谢谢!
发布于 2008-10-10 14:06:33
如果您只知道行号,但不知道其他内容,我找到了另外两个solutions (不能使用grep ):
假设您需要20到40行,
sed -n '20,40p;41q' file_name
或
awk 'FNR>=20 && FNR<=40' file_name
使用sed
时,在打印完最后一行后退出处理比继续处理直到文件末尾更有效。这对于开头的大文件和打印行的情况尤其重要。为此,上面的sed
命令引入了指令41q
,以便在第41行之后停止处理,因为在本例中,我们只对第20-40行感兴趣。您需要将41更改为您感兴趣的最后一行,加1。
发布于 2013-06-28 22:35:25
# print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
在大文件上高效的方法3
显示特定行的最快方法
发布于 2008-10-15 13:55:17
没有,文件是不可行寻址的。
没有固定时间的方法可以在文本文件中找到第n行的开始。您必须流过文件并计算换行数。
使用最简单/最快的工具来完成这项工作。对我来说,使用head
比使用grep
更有意义,因为后者要复杂得多。我不是说"grep
很慢“,它确实不慢,但在这种情况下,如果它比head
快,我会感到惊讶。基本上,这是head
中的一个bug。
https://stackoverflow.com/questions/191364
复制相似问题