用于比较列表和执行集合操作的 unix 实用程序

unix utility to compare lists and perform a set operation

我想我要的是一种集合运算。我需要帮助来尝试创建以下列表:

列表 1 包含:

1
2
3
A
B
C

列表 2 包含:

1
2
3
4
5
A
B
C
D
E

(我需要这个)- 我需要的最终清单是 (4) 项:

4
5
D
E

很明显,List2 包含的元素比 List1 多。 我需要的最终列表是 List2 中不在 List1 中的元素。

我可以使用哪个 linux 实用程序来完成此操作?我查看了 sortcomm,但不确定如何正确执行此操作。感谢帮助

使用具有直接逻辑的 awk

awk 'FNR==NR{a[[=10=]]; next}!([=10=] in a)' file1 file2
4
5
D
E

使用 GNU comm 实用程序,根据 man comm 页面,

comm -3 file1 file2
      Print lines in file1 not in file2, and vice versa.

将它用于您的示例

comm -3 file2 file1
4
5
D
E

你可以用一个简单的 grep 命令来完成,用 -v 反转匹配并用 -f 从 list1 读取搜索词,例如grep -v -f list1 list2。使用示例:

$ grep -v -f list1 list2
4
5
D
E

Linux 提供了许多不同的方法来为这只猫制作皮肤。

你可以试试这个:

$ diff list1.txt list2.txt | egrep '>|<' | awk '{ print  }' | sort -u
4
5
D
E

希望能帮到你