2016-11-24 4 views
0

В настоящее время это работает:JQ - выберите содержит массив или/и

jq -r '.[] | select(.hosts | contains('$array')).hostName') 

Если array = ["darwin","intel"] возвращает объекты, содержащие как Darwin «и» Интел. Как я могу вернуть объекты, содержащие darwin "и/или" intel?

ответ

1

Предполагая, что ваш JQ имеет any/2, я бы рекомендовал использовать следующее определение: intersectq/2

def intersectq(a;b): any(a[]; . as $x | any(b[]; . == $x)); 

фильтр, чтобы использовать затем просто:

.[] | select(intersectq(.hosts; $array)) | .hostName 

как в:

jq --argjson array '["darwin","intel"]' -r -f program.jq hosts.json 
+0

спасибо, что работает! теперь мне нужно выяснить, почему – pkpowell

 Смежные вопросы

  • Нет связанных вопросов^_^