如何用Shell截取nginx最近10分钟的日志

我想请分析下,如何用Shell截取nginx最近10分钟的日志
最新回答
献世佛

2024-06-29 05:36:03

这个问题不太适合用shell脚本,perl之类的脚本做这个工作会更高效一些,无论是开发效率还是运行效率。
用shell的话,tail命令是不合适的,根本不知道从哪行开始截,如果还要计算的话,那就把问题复杂化了。用tac命令就是了,tac logfile | {filter logic} | tac,假如日志文件是下面的格式:

192.168.0.1 - - [20/Jun/2013:17:41:48 +0800] "GET / HTTP/1.1" ...那么可以执行下面的命令:

tac log | awk 'BEGIN{ "date -d \"-10 minute\" +\"%H:%M:%S\"" | getline min10ago } { if (substr($4, 14) > min10ago) print else exit }' | tac这组命令没有考虑日期,只比较时间部分。