如何将日志过滤为仅包含两个时间之间的行?

如何将日志过滤为仅包含两个时间之间的行?

我在 Unix 上工作。

我想从当前日期的指定时间范围内的日志中获取信息。例如,我想要今天日期从 00:00 到 09:00 的日志文件中的数据。

示例日志条目:

13/10/16 14:45:02 <batchspeedchange> <BELLBD.BD77350A.G6987V00> <> FAILED FILE FORMAT VALIDATION - ERROR:-213:rawData cannot contain tokens

如何从这样的日志文件中获取输出?

答案1

假设日期看起来像您显示的“HH:MM”,并且假设日期出现在第二个字段中,您可以使用 awk:

awk -v start=00:00 -v stop=09:00 'start <= $2 && $2 < stop' file.log

[咆哮] 我对日期格式非常挑剔,而这个很糟糕:“09/10/11”是哪一天? [/咆哮]

无论如何,假设这是“YY/MM/DD”

awk -v date="$(date +%y/%m/%d)" \
    -v start=00:00:00 \
    -v stop=09:00:00 \
    -v search="File format not found" \
'$1 == date && start <= $2 && $2 < stop && $0 ~ search' file.log

答案2

假设日志文件中的行按时间顺序排列,并且在 00:00 和 00:09 有一个事件:

awk '/^13\/10\/16 00:00/,/^13\/10\/16 09:00/ {print}' file.log

我发现上面的内容很容易记住,并且在调查日志时是一个很好的工具。这些假设对于生产用途来说过于宽泛。

相关内容