![如何将日志过滤为仅包含两个时间之间的行?](https://linux22.com/image/3373/%E5%A6%82%E4%BD%95%E5%B0%86%E6%97%A5%E5%BF%97%E8%BF%87%E6%BB%A4%E4%B8%BA%E4%BB%85%E5%8C%85%E5%90%AB%E4%B8%A4%E4%B8%AA%E6%97%B6%E9%97%B4%E4%B9%8B%E9%97%B4%E7%9A%84%E8%A1%8C%EF%BC%9F.png)
我在 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
我发现上面的内容很容易记住,并且在调查日志时是一个很好的工具。这些假设对于生产用途来说过于宽泛。