["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
これは、少なくとも1つの(「すべての」)要素が文字列であるすべてのサブ配列を選択しますa
。index()
内部を解いてany()
単に使用することもできますが、map(select(index("a")))
言語のany()
観点からIMHOを使用する方が良く見え、ほぼ同じになります。フォローアップの質問に対する私の答え。