2017-06-04 83 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