给定一个测试文件test.json:
[
{
"name": "foo",
"key1": "val3,val2,val1",
"category": "thefoocategory"
},
{
"name": "bar",
"key1": "val2",
"category": "thebarcategory"
}
]
并给出:
str="val1,val2,val3"
我想从文件中过滤“name”属性,其关联的“key1”属性(被视为数组)保存被视为数组的“str”的所有值(元素顺序无关紧要)[foo ]
我尝试使用更简单的用例(在测试文件中用“X”替换“valX”),但我坚持指定成员资格条件。
类似:
cat test1 | jq -r --arg v "1,2,3" '[.[] | select($v | split(",") | all((.key1 | split(",")) | index(.) != null))]'
它失败了(无法用字符串“key1”索引字符串),但我真的无法弄清楚为什么用 [1,2,3] 替换
(.key1|split(","))
会产生结果。
您可以将列表以逗号分隔成一个数组,然后对其进行排序。这样,任何先前的订单都被视为统一。与同等对待的所有
.key1
值进行比较。
str="val1,val2,val3"
jq --arg str "$str" '
($str / "," | sort) as $arr
| map(select(.key1 / "," | sort == $arr).name)
'
[
"foo"
]