это можно сделать довольно легко с помощью
gron
допустим есть два сопоставимых файла
1.json и
2.json
необходимо заменить значение ключа
iata_code
в первом файле на значения из второго файла.
1.json{
"json": 1,
"city": "Лондон",
"airports": [
{
"name": "Хитроу",
"city": "Лондон",
"country": "Великобритания",
"iata_code": "ЛХР"
},
{
"name": "Хитроу2",
"city": "Лондон2",
"country": "Великобритания2",
"iata_code": "ЛХР2"
}
]
}
2.json{
"json": 2,
"city": "London",
"airports": [
{
"name": "Heathrow",
"city": "London",
"country": "United Kingdom",
"iata_code": "LHR"
},
{
"name": "Heathrow2",
"city": "London2",
"country": "United Kingdom2",
"iata_code": "LHR2"
}
]
}
1) удаляем все значения
iata_code
из первого файла и записываем в промежуточный файл 3.gron
gron 1.json | grep -v "iata_code" > 3.gron
2) во втором файле оставляем только значения
iata_code
и добавляем в промежуточный файл 3.gron
gron 2.json | grep "iata_code" >> 3.gron
3) преобразовываем промежуточный файл в json
gron --ungron 3.gron > 3.json
результат
3.json{
"airports": [
{
"city": "Лондон",
"country": "Великобритания",
"iata_code": "LHR",
"name": "Хитроу"
},
{
"city": "Лондон2",
"country": "Великобритания2",
"iata_code": "LHR2",
"name": "Хитроу2"
}
],
"city": "Лондон",
"json": 1
}