在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"]
我是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"]