我正在尝试浏览 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
解释:
fma=...
说以年、月、日、时、分、秒的格式存储在五分钟前的 shell 变量中fma
,date
这似乎是您的日志的作用。line_num=...
说向后读取文件并将其通过管道传输到awk
.在awk
程序中,将 bash 变量保存$fma
为five_minutes_ago
,然后如果字段数量超过 1 并且日志时间小于目标时间,则打印出我们到目前为止看到的行数(包括那些没有看到的行数) t 资格)并退出。将结果存储为 shell 变量line_num
。- 最后,使用
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
这解决了我对这些时间戳的问题,并且我能够解析日志文件。