bash - 从特定行号跟踪日志文件
问题描述
我知道如何尾随特定行数的文本文件,
tail -n50 /this/is/my.log
但是,如何使该行计数成为变量?
假设我有一个大型日志文件,该文件每天由某个程序附加,日志文件中的所有行都以这种格式的日期时间开头:
Day Mon YY HH:MM:SS
每天我都想输出日志文件的尾部,但只输出前几天的记录。假设这个输出在午夜之后运行,我不担心尾巴会溢出到第二天。
我只是希望能够根据昨天日期的第一次出现来计算出要尾随的行数......
那可能吗?
解决方案
回答标题问题,对于任何以这种方式来到这里的人来说,head 和 tail 都可以接受一个代码,用于排除文件的多少。
- 对于tail,
-n +num
用于行号num
开始于 - 对于head,
-n -num
用于不打印的行数
如果您记住了上次执行命令时的行数,那么这与实际问题相关,然后使用该数字tail -n +$prevlines
来获取部分日志的下一部分,无论检查日志的频率如何。
回答实际问题,在您可以 grep 的特定行之后打印所有内容的一种方法是使用 -A 带有荒谬计数的选项。这可能比此处的其他答案更有用,因为您可以获得数天的结果。因此,要获取昨天和今天到目前为止的所有内容:
grep "^`date -d yesterday '+%d %b %y'`" -A1000000 log_file.txt
您可以组合 2 个 grep 在 2 个日期范围之间打印。
请注意,这取决于日志文件中实际发生的日期。它的弱点是,如果在用作范围标记的特定日期没有记录任何事件,那么它将无法找到任何东西。
要解决这个问题,您可以为开始日期和结束日期注入虚拟记录,并在 grepping 之前对文件进行排序。不过,这可能有点矫枉过正,而且排序可能很昂贵,所以我不会举例。
推荐阅读
- javascript - 如何从响应头内容配置中获取文件名以使用 Anulgar 8 下载?
- python - tkcalendar 有没有办法显示多个日期条目小部件?
- r - 在 RStudio 的 RMarkdown 中使用 pandoc 语法的问题
- java - 使用 iText 生成 PDF 文件的问题
- vb.net - 如何在 VB 2019 中为变量结构赋值?
- reactjs - Reactjs 在 Firefox 和 chromium 浏览器中不起作用
- hibernate - : 尝试解析抽象类的子类型时缺少类型 ID
- javascript - 反应原生渲染组件列表
- sql - 基于日期范围 Postgresql 返回值时出错
- javascript - 如何在heroku上使用puppeteer