我想过滤Ubuntu 16.04上Nginx的access.log文件中最近10分钟写入的日志。我尝试使用以下行,但仅过滤该分钟的日志。
awk -v d1="$(date --date="-10 min" "+%d/%b/%Y:%H:%M")" -v d2="$(date "+%d/%b/%Y:%H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /usr/local/nginx/logs/access.log
这是写入日志的日期格式:
12/Apr/2018:12:49:03
任何帮助将不胜感激。
答案1
问题是 nginx 日志在文件开头没有日期:考虑到这一点,你就得到了这个(我的是该行的第五个元素,请注意$4
)
sudo awk -v d1="$(date --date '-10 min' '+%d/%b/%Y:%T')" '$4 > d1' /var/log/nginx/access.log
那么问题又是在开头有不相关的方括号:
因此,删除方括号可以让您获得一些功能:
sudo awk -v d1="$(date --date '-10 min' '+%d/%b/%Y:%T')" '{gsub(/^[\[\t]+/, "", $4);}; $4 > d1' /var/log/nginx/access.log
我已经稍微简化了示例来演示该问题,但如果您愿意,您可以随时添加回上限检查。