["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를 사용하는 것이 더 좋아 보이며 거의 동일하게 만듭니다.후속 질문에 대한 내 답변.