目的:打印服务器中当前时间起最后10分钟的nginx api_access.log。
我如何尝试:
我尝试将 nginx api_access.log 中的时间戳与当前时间进行比较,然后打印过去 10 分钟的日志。
使用的命令:
awk -F'["+]' -v d1="$(date --date '-10 min' '+%FT%T')" -v d2="$(date '+%FT%T')" '
$4 > d1 && $4 <d2 || $4 ~ d2' api_access.log
Nginx api_access.log:
{"@timestamp":"2020-06-15T12:36:38+00:00","msec":1592224598.704,"remote_addr":xxx xxxx}
{"@timestamp":"2020-06-15T12:51:41+00:00","msec":1592225501.530,"remote_addr":xxx xxxx}
失败:
无法比较当前时间和 2020-06-15T12:36:38+00:00 格式并从 api_access.log 打印最后 10 分钟日志
请帮忙...
答案1
使用 GNUawk
并将日期转换为时间戳:
awk -v d1="$(date -d '-10 min' '+%s')" -v d2="$(date '+%s')" -F'[-":,T+]' '
{ ts=mktime($5" "$6" "$7" "$8" "$9" "$10) }
ts >= d1 && ts <= d2
ts > d2{ exit 0 }
' api_access.log
如果遇到的时间戳大于当前日期的时间戳,最后一行将立即退出脚本。