![jq를 사용하여 json 배열에서 검색어가 포함된 배열 가져오기](https://linux55.com/image/209199/jq%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20json%20%EB%B0%B0%EC%97%B4%EC%97%90%EC%84%9C%20%EA%B2%80%EC%83%89%EC%96%B4%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%B0%B0%EC%97%B4%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0.png)
["a", "b", "c"]
다음 json 데이터와 검색어로 "a"가 주어지면 jq를 사용하여 검색어 "a"가 포함된 배열을 어떻게 얻을 수 있습니까?
[
["a","b","c"],
["d","e","f"],
["g","h","i"]
]
답변1
나는 이것이 귀하의 요구 사항을 충족한다고 생각합니다.
'.[]|select(index("a"))'
이는 각 하위 목록에 대해 작동하며 index("a")
목록의 인덱스를 반환합니다. false로 평가되므로 포함된 하위 목록만 찾는 조건으로 사용합니다.a
null
null
select()
a
실제 모습은 다음과 같습니다.
$ jq '.[]|select(index("a"))' <<EOF
> [
["a","b","c"],
["d","e","f"],
["g","h","i"]
]
EOF
[
"a",
"b",
"c"
]
답변2
최상위 배열에는 다음이 포함될 수 있으므로일부쿼리 문자열을 포함하는 하위 배열, 원하는 것은 각 하위 배열에 쿼리 문자열이 포함된 최상위 배열이라고 가정합니다.
jq 'map(select(any(index("a"))))' file
이는 적어도 하나의 ("모든") 요소가 문자열인 모든 하위 배열을 선택합니다 a
. index()
내부를 풀고 any()
그냥 사용할 수도 있지만 map(select(index("a")))
언어 any()
관점에서 IMHO를 사용하는 것이 더 좋아 보이며 거의 동일하게 만듭니다.후속 질문에 대한 내 답변.