【发布时间】:2017-02-12 17:13:24
【问题描述】:
我有大约 100 MB 大小的日志文件,包含这样的行,开头包含日期时间信息:
[Tue Oct 4 11:55:19 2016] [hphp] [25376:7f5d57bff700:279809:000001] [] \nFatal error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ')' in /var/cake_1.2.0.6311-beta/app/webroot/openx/www/delivery/postGetAd.php(12479)(62110d90541a84df30dd077ee953e47c) : eval()'d code on line 1
我有一个插件(nagios check_logwarn)只打印出那些包含一些错误字符串的行。以下是运行它的命令:
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn -p /mnt/log/hiphop/error_20161003.log "^.*Fatal error*"
我想根据日期时间进一步过滤掉,例如,11:55:10 之后的所有行。
我不确定是否为此使用正则表达式。以下是我目前所拥有的:
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn -p /mnt/log/hiphop/error_20161003.log "^.*Fatal error*" | grep "15\:19\:1*"
但这只会过滤那些时间在第 15 小时的第 19 分钟的日志。
更新
我现在可以比较日期时间的时间部分。
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn -p /mnt/log/hiphop/error_20161004.log "^.*Fatal error*" | awk '$4 > "14:22:11"'
如何比较一天部分?
更新 2 - 开放赏金
我不得不开一个赏金,因为我对 shell 没有太多的专业知识,我很快需要一个解决方案。
我被困在比较日期的部分。使用解决方案https://stackoverflow.com/a/39856560/351903,我将面临this problem。如果那是固定的,我会很高兴的。
我也愿意对此进行一些改进(我不介意输出是否有一些混乱的日志顺序)-
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn -p /mnt/log/hiphop/error_20161004.log "^.*Fatal error*" | awk '$4 > "14:22:11"'
我查找了一些日期时间与时间戳的比较,但找不到有效的方法。
我无法继续 this question 中给出的内容。我看不到时间戳值 -
echo date -d '06/12/2012 07:21:22' +"%s"
不知道我错过了什么。
【问题讨论】:
-
你在这里看到了吗? stackoverflow.com/questions/22565450/…
-
感谢您的链接。请查看问题更新。
-
@Downvoter,请注意,此处提供的链接仅回答了我的部分问题。它不是那个的副本。
-
最好提供minimal reproducible example。一行太少了。