수십만 개의 JSON 파일을 단일 개체로 병합하려고 합니다. 이것의 도움으로답변모든 개체를 배열로 단일 개체에 성공적으로 추가했습니다. 이제 특정 필드나 매개변수가 중복되는 경우 병합 중에 일부 개체를 필터링하고 싶습니다. field 1
동일한 값을 갖는 두 객체 와 같습니다 .
다음은 예입니다.
입력 파일 1:
[
{
"field 1": 10,
"field 2": 25,
"field 3": 35,
"field 4": 45
}
]
입력 파일 2:
[
{
"field 1": 15,
"field 2": 25,
"field 3": 35,
"field 4": 45
}
]
입력 파일 3:
[
{
"field 1": 10,
"field 2": 20,
"field 3": 30,
"field 4": 40
}
]
예상 출력:
[
{
"field 1": 10,
"field 2": 25,
"field 3": 35,
"field 4": 45
},
{
"field 1": 15,
"field 2": 25,
"field 3": 35,
"field 4": 45
}
]
field 1
파일 3 개체는 동일한 값 으로 인해 병합되지 않습니다.
답변1
중복 항목을 제거하기 위해 개체 배열과 필드 이름을 입력으로 사용하는 unique_by()
함수를 사용할 수 있습니다.jq
jq -n '[ inputs[] ] | unique_by(."value 1")'
내 다른 것에 첨부답변한 필드를 기반으로 고유한 선택을 하고 다른 필드를 기준으로 개체를 삭제하려면 다음을 수행할 수 있습니다. 다음 코드는 중복 항목을 제외하고 개체를 그룹화 "value 1"
하고 다음을 포함하는 개체를 제외합니다."value 6"
jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )] '