我必须创建一个shell脚本,以便每次执行它时都会转到常用的日志文件并进行更新。已经完成的工作是选择所有错误的日志并显示为输出。但是现在我希望这就像是选择日志,这些日志已经过了几分钟而且不再存在。
grep适用于获取时间戳行。但是我该怎么做只获得新数据而不是太旧。
grep -i error log.log | grep `date +%Y'-'%m'-'%d`
日志文件格式如下:' [YYYY-mm-dd时间戳中的日期] - 生成错误/异常'
任何帮助将不胜感激。提前谢谢大家。
答案 0 :(得分:2)
这有点棘手。 60分钟前的日期将有助于grep 60分钟前发生的条目,但在此之后无法找到。幸运的是,awk很好用时间戳:
awk -F']' -v limit="[`date -d '60 minutes ago' +'%Y-%m-%d %H:%M:%S'`" '
BEGIN {IGNORECASE=1} /error/ && $1 > limit' log.log
请注意使用-F']'
将分隔符设置为]
,并在时间戳限制字符串的开头添加[
。这意味着awk
实际上会比较时间戳,包括其开括号,例如"[2016-04-20 17:55:08"
,但没关系,它仍然有效。
不喜欢awk?怎么样:
start=`date -d '60 minutes ago' '%Y-%m-%d %H:%M:%S'`
sort -d <(grep -i error log.log) <(echo "[$start") |
sed -n "/$start/,$p" |
grep -v "^\[$start$"