1

我们正在尝试从文件中提取日志,我们需要所有符合模式且时间戳在过去 24 小时内的条目。

我的日志如下所示:

2014-07-01 01:15:59,486 WARN 86c9c59c-c362-48d5-bd8c-fb4c8b616f5a 169.179.101.7 CITIKYC_164283 stence.audit.support.impl.AuditUtilsImpl:274 - 审核更新成功

2014-07-01 01:15:59,487 WARN 86c9c59c-c362-48d5-bd8c-fb4c8b616f5a 169.179.101.7 CITIKYC_164283 stence.audit.support.impl.AuditUtilsImpl:173 - 重复注册,跳过...

2014-07-01 01:15:59,488 胡说八道..

到目前为止,我们得到了前一天的日志

D=$(date +"%Y-%m-%d" -d "-1 days")
cat citikyc.log | awk '/'$D' /, /'$D' / { print $0 }' | grep "Exception\|at.*\.java\:.*" | mail -s "TESTING" xxx@yyy.com

请帮助我们获取过去 24 小时的日志。

提前致谢...!!

4

2 回答 2

4

试试这个单线:

awk -v d="$(date -d'24 hours ago' +'%F %T,000')" '$1" "$2>=d &&/YourSearch/' log

我没有测试,希望没有错别字。

date -d'24 hours ago' +'%F %T,000'将为您提供当前 24 小时前的时间戳。

YourSearch是您的搜索模式(正则表达式)。

添加一个测试以显示它是如何工作的:

#this is my current time
kent$  date +'%F %T'
2014-07-02 15:27:46

#file content, so only last 3 lines are in "last 24 hours"
kent$  cat f
2014-06-01 01:15:59,123 foo
2014-07-01 02:15:59,123 bar bar bar
2014-07-01 01:15:59,123 foo
2014-07-01 02:15:59,123 foo
2014-07-01 03:15:59,123 foo
2014-07-01 21:15:59,123 foo
2014-07-01 22:15:59,123 foo
2014-07-01 23:15:59,123 foo

#let's get them
kent$  awk -v d="$(date -d'24 hours ago' +'%F %T,000')" '$1" "$2>=d &&/foo/' f
2014-07-01 21:15:59,123 foo
2014-07-01 22:15:59,123 foo
2014-07-01 23:15:59,123 foo
于 2014-07-02T11:34:27.457 回答
0

完整的awk。
这应该有效。
转换为纪元,然后在纪元中针对当前时间进行测试,这精确到秒。

awk 'NF&&/yoursearch/{split($1,d,"-");split($2,t,":");epoch = mktime(d[1]" "d[2]" "d[3]" "t[1]" "t[2]" "t[3])}(systime()-epoch)<86400{print} ' log
于 2014-07-02T13:00:17.727 回答