2017-06-04 82 views
1

jq有可能找到2个不同的json文件之间的关联吗?我有两个文件,其中的两个相同的ID键具有不同的信息。2个不同的json文件与jq之间的相关性

文件1

{ 
    "id": 3918389, 
    "name": "Application", 
    "servers": 5566625 
} 

文件2

{ 
    "ServerID": 5566625, 
    "AccountID": 661737, 
    "HostName": "example.com", 

} 

我希望有一个文件,其中 “服务器ID” 和 “服务器” 是一样的,然后合并所有类似的信息:

输出

{ 
"id": 3918389, 
"name": "Application", 
"AccountID": 661737, 
"HostName": "example.com", 
} 

任何建议是appre ciated。

谢谢!

回答

2

JQ溶液:

cat File[1-2] | jq -s 'if .[0].servers == .[1].ServerID then 
       .[0] + .[1] | del(.servers,.ServerID) else "not match" end' 

输出:

{ 
    "id": 3918389, 
    "name": "Application", 
    "AccountID": 661737, 
    "HostName": "example.com" 
} 

详细说明:

  • cat File[1-2] - 连接在一起,发送到File1File2依次

  • -s--slurp)的标准输出内容 - 而不是运行为输入中的每个JSON对象的过滤器,读取整个输入流分成大阵列和运行过滤器只有一次。

  • if-then-else - 条件,执行与删除键相比沿del(.servers,.ServerID)合并两个对象.[0] + .[1],如果关键性能相等.[0].servers == .[1].ServerID,否则 - 打印not match

+0

谢谢你,它真的有效! 我现在在练习jq,我不知道我的File1是否会包含更多具有相同“名称”的“服务器”,我是否可以收集“ServerID”的所有主机名,仍可以使用jq? 包含Pastebin示例。 https://pastebin.com/wBWgJ6da 再次感谢! –

+1

@TökiMivan,很好地为新的条件创建一个新的问题 – RomanPerekhrest