获取具有特定时间戳的日志文件的最后 X 分钟

获取具有特定时间戳的日志文件的最后 X 分钟

我正在尝试浏览 IPA 主机的日志文件以获取最后五分钟的内容并获取有关新用户创建或 DNS 更改等内容的更新。我想定期执行此操作,以便每五分钟它会检查前五分钟,检查并匹配一些字符串,然后通过电子邮件发送这些结果。我不知道如何轻松比较日志中显示的类型的字符串:

20200114184803 = 2020-01-14 | 18:48:03

time: 20200114184803
Stuff
Stuff
Stuff

time: 20200114184804
Stuff
Stuff
Stuff

time: 20200114184811
Stuff
Stuff
Stuff

答案1

我将其分解为几个变量,但您可能可以下一步或通过管道更好地处理它:

fma=`date --date='5 minutes ago' +"%Y%m%d%H%M%S"`
line_num=`tac file.txt | awk -v five_min_ago=$fma\
      '(NF > 1 &&  $2 < five_min_ago ){print NR; exit 1}'`
tail -$line_num file.txt

解释:

  1. fma=...说以年、月、日、时、分、秒的格式存储在五分钟前的 shell 变量中fmadate这似乎是您的日志的作用。
  2. line_num=...说向后读取文件并将其通过管道传输到awk.在awk程序中,将 bash 变量保存$fmafive_minutes_ago,然后如果字段数量超过 1 并且日志时间小于目标时间,则打印出我们到目前为止看到的行数(包括那些没有看到的行数) t 资格)并退出。将结果存储为 shell 变量line_num
  3. 最后,使用tail来获取最后line_num一行file.txt

注意:您必须调整字段检查的数量,因为您可能拥有的不仅仅是“东西”,但这应该可以帮助您完成大部分工作。

答案2

我已经awk在我的脚本中解决了这个问题:

ONE_HOUR_AGO="$(date -d '1 hour ago' +%Y%m%d%H)"
NOW="$(date +%Y%m%d%H)"
awk '/time: '$NOW'/,/time: '$ONE_HOUR_AGO'/' log_file.txt

这解决了我对这些时间戳的问题,并且我能够解析日志文件。

相关内容