![jq를 사용하여 특정 키와 해당 상위 키의 값을 가져옵니다.](https://linux55.com/image/141924/jq%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8A%B9%EC%A0%95%20%ED%82%A4%EC%99%80%20%ED%95%B4%EB%8B%B9%20%EC%83%81%EC%9C%84%20%ED%82%A4%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4..png)
다음과 같은 JSON 개체가 있습니다.
{
"1": {
"available_memory": 1086419656.0,
"available_memory_no_overbooking": 1086419656.0,
"conns": 1.0
},
"2": {
"available_memory": 108641236.0,
"available_memory_no_overbooking": 10861216.0,
"conns": 2.0
}
}
각 개체 ID에 대한 "conns" 속성 값을 검색하고 싶습니다. 저는 jq를 처음 접했는데 명확한 예를 찾을 수 없습니다.
나는 다음을 시도했습니다 :
echo "$OUTPUT" | jq -r .[].conns
conns의 모든 값을 반환하지만 그것은 내가 필요한 것이 아닙니다. 예상되는 출력은 다음과 같습니다.
1 1.0
2 2.0
어떤 아이디어가 있나요?
답변1
$ jq -r 'keys[] as $k | "\($k) \(.[$k].conns)"' file.json
1 1
2 2
jq는 1.0을 1로, 2.0을 2로 변환하는 것 같습니다. 명확성을 위해 입력을 변경합니다.
$ cat file.json
{
"1a": {
"available_memory": 1086419656.0,
"available_memory_no_overbooking": 1086419656.0,
"conns": 1.1
},
"2b": {
"available_memory": 108641236.0,
"available_memory_no_overbooking": 10861216.0,
"conns": 2.2
}
}
$ jq -r 'keys[] as $k | "\($k) \(.[$k].conns)"' file.json
1a 1.1
2b 2.2
참고자료:
답변2
대체 솔루션(jtc
)질문을 단순화하려면 일부 표준 cli를 사용하십시오.
bash $ echo $OUTPUT | jtc -rl -w'[+0]' -w'[+0][conns]' | sed 's/: {.*//g; s/^"conns"://' | xargs -n2
1 1.0
2 2.0
bash $
jtc(jq와 달리)는 기능을 json 작업으로 제한하는 유틸리티이므로(인터페이스가 매우 간단함) JSON 데이터 모델 외부의 작업은 외부 Unix 도구로 오프로드됩니다.
편집: 새 버전은 jtc
더 간단한 솔루션을 지원합니다.
bash $ jtc -w'<conns>l:<con>v[-1]<key>k' -T '"{key} {con}"' -qq <<<$OUTPUT
1 1.0
2 2.0
bash $