Как написать это в JQ-запрос для получения пересечения? - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в jq,

и хотел бы получить пересечение двух массивов (аналогичный вопрос, НО с другой подход : ссылка ).Мне удалось получить объединение двух массивов и сложение двух массивов: то есть:

A=['a','b','e','c']
B=['g','a','t','c']

Я написал:

echo '{"group_a":["A","B","C","ABC"],"group_b":["B","D"]}' | jq .group_a+.group_b

A + B = ['a', 'b',' e ',' c ',' g ',' g ',' a ',' t ',' c ']

echo '{"group_a":["A","B","C","ABC"],"group_b":["B","D"]}' | jq .group_a+.group_b | jq 'unique'

AUB = [' a ',' b ','e', 'c', 'g', 't']

но как мне теперь применить эту простую логику:

intersection = unique((A+B) - (A U B))

я привык к одному вкладышу, иЯ хотел бы, чтобы этот фрагмент был читабельным и элегантным для будущего использования.так как мне реализовать это в стиле jq?

любая помощь будет полезна, спасибо всем!

1 Ответ

0 голосов
/ 17 декабря 2018

Предполагая, что массивы не содержат дубликатов (если они есть, используйте unique, чтобы отфильтровать дублирующиеся результаты):

jq -cn '["a","b","e","c"] as $A | ["g","a","t","c"] as $B | $A - ($A - $B)'
echo '{ "group_a" : ["a","b","e","c"], "group_b" : ["g","a","t","c"] }' | jq -c '.group_a - (.group_a - .group_b)'

Они оба дают:

["a","c"]
...