Mol*_*pad 3 bash tail less-unix
我知道如何使用特定行数来拖尾文本文件,
tail -n50 /this/is/my.log
Run Code Online (Sandbox Code Playgroud)
但是,如何使该行计数成为变量?
假设我有一个大型日志文件,它由某个程序每天附加到,日志文件中的所有行都以这种格式的日期时间开头:
Day Mon YY HH:MM:SS
Run Code Online (Sandbox Code Playgroud)
每天我都想输出日志文件的尾部,但只输出前几天的记录。假设这个输出在午夜之后运行,我不担心尾部会溢出到第二天。
我只是希望能够根据昨天日期的第一次出现来计算出要拖尾的行数...
那可能吗?
回答标题的问题,对于以这种方式来到这里的任何人,head 和 tail 都可以接受一个代码来排除多少文件。
-n +num用于行号num开始于-n -num用于不打印的行数如果您记住了上次执行命令时的行数,然后使用该数字tail -n +$prevlines获取部分日志的下一部分,则无论检查日志的频率如何,这都与实际问题相关。
回答实际问题,在可以 grep 的特定行之后打印所有内容的一种方法是使用 -A 选项和可笑的计数。这可能比这里的其他答案更有用,因为您可以获得几天的结果。因此,要获取昨天和今天的所有内容:
grep "^`date -d yesterday '+%d %b %y'`" -A1000000 log_file.txt
Run Code Online (Sandbox Code Playgroud)
您可以组合 2 个 grep 以在 2 个日期范围之间打印。
请注意,这取决于日志文件中实际发生的日期。它的缺点是如果在用作范围标记的特定日期没有记录任何事件,那么它将无法找到任何内容。
要解决这个问题,您可以为开始日期和结束日期注入虚拟记录,并在 grepping 之前对文件进行排序。不过,这可能有点矫枉过正,而且这种排序可能很昂贵,所以我不会举例说明。
| 归档时间: |
|
| 查看次数: |
12731 次 |
| 最近记录: |