仅获取列表x中不在列表y中的那些元素

时间:2016-06-30 05:50:01

标签: bash

我有两个清单:

tagged=(a-01 a-02 a-03 a-04 a-06)
merged=(a-01 a-02 a-05)

我正在寻找一个bash解决方案,只打印tagged列表中但不在merged(a-03 a-04 a-06))中的元素。

我一直试图迭代这两个列表,但我失败了。 我坚信bash有一些偷偷摸摸的方式来解决它。

1 个答案:

答案 0 :(得分:5)

您可以将grep -vf与流程替换结合使用:

tagged=(a-01 a-02 a-03 a-04 a-06)
merged=(a-01 a-02 a-05)

grep -vf <(printf "%s\n" "${merged[@]}") <(printf "%s\n" "${tagged[@]}")

a-03
a-04
a-06

将结果存储在数组中:

diffarr=($(grep -vf <(printf "%s\n" "${merged[@]}") <(printf "%s\n" "${tagged[@]}")))

declare -p diffarr
declare -a diffarr='([0]="a-03" [1]="a-04" [2]="a-06")'
相关问题