识别多个文件中的共同元素

4 投票
6 回答
2814 浏览
提问于 2025-04-17 09:23

我有8个文件,每个文件里只有一列数据,但每个文件的行数不一样。我需要找出这8个文件中都出现的元素。

我可以比较两个文件,但我不知道怎么写一个能在命令行中一次性完成这个任务的命令。

有没有什么好主意……

谢谢大家。

文件1
Paul
pawan

文件2
Raman
Paul
sweet
barua

文件3
Sweet
barua
Paul

这三个文件比较的结果应该是Paul。

6 个回答

4

Perl

$ perl -lnE '$c{$_}{$ARGV}++ }{ print for grep { keys %{$c{$_}} == 8 } keys %c;' file[1-8]

应该可以通过 @{[ glob "@ARGV" ]} 来去掉硬编码的 8,不过我现在没时间去测试这个。

这个解决方案也能正确处理文件中重复行的情况。

8

下面这行代码应该可以解决问题(把3改成8,适应你的情况)

$ sort * | uniq -c | grep 3
      3 Paul

不过用Python来做这个可能更好,使用sets(集合)...

6
python -c 'import sys;print "".join(sorted(set.intersection(*[set(open(a).readlines()) for a in sys.argv[1:]])))' File1 File2 File3

这个代码会在你的文件 File1File2File3 中打印出 Paul

撰写回答