从列获取JSON值

tes*_*est 3 unix bash awk json jq

我有一堆两列日志,由制表符分隔.第二列是有效的JSON:

2019-02-28T19:43:48.585Z        {"id": 1234, "catId": 42, "img": "other.jpg"}
2019-02-28T19:44:48.585Z        {"id": 4321, "catId": 999, "img": "my.jpg"}
2019-02-28T19:44:48.585Z        {"id": 1234, "catId": 42, "img": "new.jpg"}
2019-02-28T19:46:48.585Z        {"id": 1234, "catId": 765, "img": "cat.jpg"}
Run Code Online (Sandbox Code Playgroud)

我的目标是保留timestamp列,并打印catId属性:

2019-02-28T19:43:48.585Z        42
2019-02-28T19:44:48.585Z        999
2019-02-28T19:44:48.585Z        42
2019-02-28T19:46:48.585Z        765
Run Code Online (Sandbox Code Playgroud)

我尝试迄今已插jqawk,但我与挣扎的system命令.

awk -F '\t' '{printf "\n %s \t %s \n", $1, system("jq .catId <<< " $2)}' file
Run Code Online (Sandbox Code Playgroud)

我们非常感谢任何正确方向的帮助.

Jef*_*ado 5

如果文件是制表符分隔的,则可以在原始文件中读取文件,在选项卡上拆分,解析并解压缩json,然后重新加入选项卡.

$ jq -Rr 'split("\t") | .[1] |= fromjson.catId | join("\t")' input.log
Run Code Online (Sandbox Code Playgroud)