用于比较列表和执行集合操作的 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 实用程序来完成此操作?我查看了 sort
、comm
,但不确定如何正确执行此操作。感谢帮助
使用具有直接逻辑的 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
希望能帮到你
我想我要的是一种集合运算。我需要帮助来尝试创建以下列表:
列表 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 实用程序来完成此操作?我查看了 sort
、comm
,但不确定如何正确执行此操作。感谢帮助
使用具有直接逻辑的 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
希望能帮到你