在JQ中获取数组的交集

Get intersection of arrays in JQ

我是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'

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

但是我现在如何应用这个简单的逻辑:

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

我习惯了一个衬里,我希望这个片段可读且优雅以备将来使用。 那么我该如何以 jq 风格实现它呢?

任何帮助都会有帮助,谢谢大家!

假设数组不包含重复项(如果包含重复项,请使用 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"]