["a", "b", "c"], ["abc", "e", "f"]
次のjsonデータと「a」が部分的に一致するクエリで与えられた場合、jqを使用して部分的に一致するクエリ「a」を含む配列をどのように取得できますか?
[
["a", "b", "c"],
["abc", "e", "f"],
["g", "h", "i"]
]
jq '. [] | select(index("a"))'
正確に一致するものだけをインポートしますが、["a", "b", "c"]
「abc」に「a」が含まれているのでインポートしたいと思います。["abc", "e", "f"]
答え1
以下とは少し異なるアプローチ漕ぐ船は何を持っていったの?:
jq 'map(select(any(contains("a"))))' file
最も内側のテストは各文字列の部分文字列をテストしますa
。サブ配列の文字列にが含まれている場合は、a
そのサブ配列が選択されます。map
最上位配列のすべてのサブ配列に選択を適用します。
結果は、1つ以上の部分文字列を含む要素を含むサブ配列の最上位配列ですa
。
[
[
"a",
"b",
"c"
],
[
"abc",
"e",
"f"
]
]
答え2
jq '[.[] | select(contains(["a"]))]'
入力配列を使用します。
$ jq -c << \\ '[.[] | select(contains(["a"]))]'
[
["a", "b", "c"],
["abc", "e", "f"],
["g", "h", "i"]
]
\
[["a","b","c"],["abc","e","f"]]
man jq
(https://stedolan.github.io/jq/manual/)少し長いが、関連部分は以下の通りである。
contains(b)
b が入力に完全に含まれる場合、フィルタは true を生成します。 B が A の部分文字列の場合、文字列 B は文字列 A に含まれます。 Bのすべての要素がAの要素に含まれる場合、配列Bは配列Aに含まれます。jq 'contains(["baz", "bar"])' タイプ["foobar","foobaz","blarp"] 確かに出力