Сравнение файла 2 JSON с использованием jq в bash с сохранением разницы в другом json или текстовом файле - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть 2 json файлов.

test1. json

{
"GeoIP.x86_64":"1.5.0-14.el7",
"NetworkManager.x86_64":"1:1.18.0-5.el7_7.1",
"NetworkManager-libnm.x86_64":"1:1.18.0-5.el7_7.1",
"NetworkManager-ppp.x86_64":"1:1.18.0-5.el7_7.1"
}

test2. json

{
"GeoIP.x86_64":"1.5.0-14.el7",
"NetworkManager.x86_64":"1:2.18.0-5.el7_7.1",
"NetworkManager-libnm.x86_64":"1:1.19.0-5.el7_7.1",
"NetworkManager-ppp.x86_64":"1:1.19.0-5.el7_7.1",
"gcc" : "1:1.9.0-el7_7.1"
}

Выше JSON может иметь или не иметь тот же пакет, я хочу создать новый 2 json, как это с выше json:

{
"NetworkManager.x86_64":"1:2.18.0-5.el7_7.1",
"NetworkManager-libnm.x86_64":"1:1.19.0-5.el7_7.1",
"NetworkManager-ppp.x86_64":"1:1.19.0-5.el7_7.1",
"gcc" : "1:1.9.0-el7_7.1"
}

Ключ = NetworkManager-libnm.x86_64 , NetworkManager.x86_64 и NetworkManager-ppp.x86_64 имеет другое значение в test2. json и g cc - новый пакет. Итак, эти 3 пакета дошли до финала json.

Я хочу добиться этого в сценарии оболочки с помощью jq.

Заранее спасибо.

1 Ответ

1 голос
/ 25 февраля 2020
jq -n --argfile one test1.json --argfile two test2.json '
   $test2 | with_entries( select($test1[.key] != .value) )'

или если вы хотите добавить функциональность ключа в вашу библиотеку jq, абстракция ключа:

   def minusObject(o1;o2):
     o1 | with_entries( select(o2[.key] != .value) );
...