다음과 같은 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 $