快速 unix 命令在文件中间显示特定行?

新手上路,请多包涵

尝试调试服务器问题,我唯一的日志文件是 20GB 日志文件(甚至没有时间戳!为什么人们使用 System.out.println() 作为日志记录?在生产中?!)

使用 grep,我找到了我想查看的文件区域,第 347340107 行。

除了做类似的事情

head -<$LINENUM + 10> filename | tail -20

…这需要 head 来读取日志文件的前 3.47 亿行,是否有一个快速简便的命令可以将行 347340100 - 347340200(例如)转储到控制台?

更新 我完全忘记了 grep 可以打印匹配的上下文……这很好用。谢谢!

原文由 matt b 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 481
2 个回答

使用 GNU-grep 你可以说

grep --context=10 ...

原文由 Mathias Weidner 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果你知道行号,我发现了另外两个 解决方案,但没有别的(没有 grep 可能):

假设您需要第 20 到 40 行,

 sed -n '20,40p;41q' file_name

或者

awk 'FNR>=20 && FNR<=40' file_name

当使用 sed 打印最后一行后退出处理比继续处理直到文件末尾更有效。这在开始时大文件和打印行的情况下尤其重要。为此,上面的 sed 命令引入了指令 41q 以便在第 41 行之后停止处理,因为在示例中我们只对第 20-40 行感兴趣。您需要将 41 更改为您感兴趣的最后一行,加一。

原文由 Sklivvz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题