如何使用awk的正则将json格式nginx日志转成csv注意时间需要保证完整time23Mar2023062516 +0800http_hostlkluckeeinccomclinetip11210220118requestPATCH apicourses20tasks407event_v2doing HTTP11status200size848upstream_addr1270019000up
可以使用以下awk命令将json格式nginx日志转成csv:
awk -F'[:,]' '{gsub(/[{}"]/,""); if($1=="time") {time=$2":"$3":"$4":"$5":"$6":"$7} else if($1=="http_host") {http_host=$2} else if($1=="clinetip") {clinetip=$2} else if($1=="request") {request=$2" "$3" "$4} else if($1=="status") {status=$2} else if($1=="size") {size=$2} else if($1=="upstream_addr") {upstream_addr=$2} else if($1=="upstream_status") {upstream_status=$2} else if($1=="upstream_response_time") {upstream_response_time=$2} else if($1=="request_time") {request_time=$2} else if($1=="http_referer") {http_referer=$2} else if($1=="http_user_agent") {http_user_agent=$2} else if($1=="http_x_forwarded_for") {http_x_forwarded_for=$2} else if($1=="request_id") {request_id=$2} if($1=="request_id") {print time","http_host","clinetip","request","status","size","upstream_addr","upstream_status","upstream_response_time","request_time","http_referer","http_user_agent","http_x_forwarded_for","request_id}}' access.log
解释:
-F'[:,]':指定分隔符为冒号、逗号、和句号。gsub(/[{}"]/,""):去掉花括号和双引号。if($1=="time") {time=$2":"$3":"$4":"$5":"$6":"$7}:匹配日志中的时间,并将其转换为完整的时间格式。else if($1=="http_host") {http_host=$2}:匹配其他字段,并保存到对应的变量中。if($1=="request_id") {print time","http_host","clinetip","request","status","size","upstream_addr","upstream_status","upstream_response_time","request_time","http_referer","http_user_agent","http_x_forwarded_for","request_id}:匹配到最后一个字段(request_id)时,输出所有变量,将其转换为csv格式。
原文地址: http://www.cveoy.top/t/topic/5AY 著作权归作者所有。请勿转载和采集!