Если вы хотите добавить объект из file2.json
в массив nodes
, это довольно просто:
jq -s '.[0].nodes += [ .[1].nodes[0] ] | .[0]' file1.json file2.json
Вывод:
{
"nodes": [
{
"pm_addr": "192.100.0.4",
"name": "TB1-OSC-A"
},
{
"pm_addr": "192.100.0.6",
"name": "TB1-OSC-B"
},
{
"pm_addr": "192.100.0.7",
"name": "TB1-OSC-C"
},
{
"pm_addr": "192.100.0.4",
"name": "TB1-OSC-D"
}
]
}
Однако, потому что вы хотите чтобы вставить объект, он становится более сложным, поскольку jq
AFAIK не поддерживает вставку в массивы, только добавляя и добавляя.
Ниже приведен довольно запутанный пример того, как это сделать, сращив его в:
parse.jq
# Find the desired index and store it as $n
(.[0].nodes | map(.name == "TB1-OSC-B") | index(true)) as $n |
# Splice the object from the second file into the first
.[0].nodes = .[0].nodes[0:($n|tonumber+1)] +
[ .[1].nodes[0] ] +
.[0].nodes[($n|tonumber+1):(.[0].nodes|length)] |
# Only output the now modified object from the first file
.[0]
Запустите его так:
jq -sf parse.jq file1.json file2.json
Вывод в этом случае:
{
"nodes": [
{
"pm_addr": "192.100.0.4",
"name": "TB1-OSC-A"
},
{
"pm_addr": "192.100.0.6",
"name": "TB1-OSC-B"
},
{
"pm_addr": "192.100.0.4",
"name": "TB1-OSC-D"
},
{
"pm_addr": "192.100.0.7",
"name": "TB1-OSC-C"
}
]
}