jq를 사용하여 json 배열에서 검색어가 포함된 배열 가져오기

jq를 사용하여 json 배열에서 검색어가 포함된 배열 가져오기

["a", "b", "c"]다음 json 데이터와 검색어로 "a"가 주어지면 jq를 사용하여 검색어 "a"가 포함된 배열을 어떻게 얻을 수 있습니까?

[
    ["a","b","c"],
    ["d","e","f"],
    ["g","h","i"]
]

답변1

나는 이것이 귀하의 요구 사항을 충족한다고 생각합니다.

'.[]|select(index("a"))'

이는 각 하위 목록에 대해 작동하며 index("a")목록의 인덱스를 반환합니다. false로 평가되므로 포함된 하위 목록만 찾는 조건으로 사용합니다.anullnullselect()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를 사용하는 것이 더 좋아 보이며 거의 동일하게 만듭니다.후속 질문에 대한 내 답변.

관련 정보