
아래와 같이 xyz.json이라는 json 파일이 있습니다.
[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": [],
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02204.png"
}
]
쉘 스크립트를 사용하여 동일한 xyz.json 파일에 있는 "filename": "vc00_02201.png"의 "annotations" 개체를 "filename": "vc00_02204.png"의 "annotations"로 복사해야 합니다. 예상 출력:
[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": [],
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02204.png"
}
]
답변1
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
답변2
이는 또한 다음을 통해 달성될 수 있습니다.jtc
한 줄:
bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json \;
[
{
"annotations": [
"a",
"b",
"c"
],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02202.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [
"a",
"b",
"c"
],
"class": "image",
"filename": "vc00_02204.png"
}
]
bash $
물론 배열의 직접 멤버를 참조하여 수행할 수 있습니다. 예를 들면 다음과 같습니다.
bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json \;
그러나 파일 이름으로 상호 참조하는 요점은 논쟁의 여지가 있습니다.