[英]Formatting awk output to resemble JSON object
我正在尝试获取awk命令的输出,以将其格式化为JSON。 我对awk或regex没有太多经验,无法正确格式化。 该脚本通过跟踪访问日志并使用awk解析出我想要的数据来从Apache获取原始数据。
我花了大约一个小时的时间来搜寻和尝试不同的格式。 我目前拥有的最佳设置是以下代码。
awk:
awk -F " " '{
print "{\"ipAddr\":\"" $1 "\",\"reqType\":\"" $4 "\",\"reqItem\":\"" $5
"\",\"reqStatus\":\"" $7 "\",\"reqUrl\":\"" $8 "\"}"
}' temp1.log >> hmReq.log;
我当前得到的输出是:
{"{\"ipAddr\":\"my.ip.Addr\",
\"reqType\":\"GET\",
\"reqItem\":\"/contact\",
\"reqStatus\":\"200\",
\"reqUrl\":\"\"https://www.example.com/\"\"}":""}
我试图让它像这样:
{
"ipAddr":"123.456.789.0",
"reqType":"GET",
"reqItem":"/contact",
"reqStatus":"200",
"reqUrl":"www.com"
}
任何帮助是极大的赞赏!
编辑:这是整个脚本:
inotifywait -m ~/hmLogs/a2access.log -e modify | while read path action file; do
cd ~/hmLogs
tail -n1 a2access.log >> temp1.log;
awk -F " " '{
print "{\"ipAddr\":\"" $1 "\",\"reqType\":\"" $4 "\",\"reqItem\":\""
$5 "\",\"reqStatus\":\"" $7 "\",\"reqUrl\":\""
$8 "\"}"}' temp1.log >> hmReq.log;
curl -s -w "\n" -d @hmReq.log -X POST http://localhost:8080/logs >> hmRes.log;
rm hmReq.log;
rm temp1.log;
cd -;
done;
从apache2 / access.log输入的原始数据样本:
161.69.99.11 [01/Aug/2019:03:59:35 +0000] GET /static/js/2.59e222c7.chunk.js HTTP/1.1 200 "https://www.tjbrackett.com/"
从字面上看,我是第一个Linux脚本,所以我确定我做错了什么。
编辑2:这是awk之前和之后temp1.log的内容。 之前:
76.20.106.208 [01/Aug/2019:17:08:40 +0000] GET /static/media/rock.1bacda84.jpg HTTP/1.1 200 "https://www.tjbrackett.com/about"
后:
76.20.106.208 [01/Aug/2019:17:08:40 +0000] GET /static/media/rock.1bacda84.jpg HTTP/1.1 200 "https://www.tjbrackett.com/about"
编辑3:看来输出是正确的,但无论出于何种原因,来自Express应用程序的响应都很奇怪。 而且,现在唯一的问题是URL周围有一组额外的引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.