繁体   English   中英

格式化awk输出以类似于JSON对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM