识别多个文件中的共同元素
我有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
这个代码会在你的文件 File1
、File2
和 File3
中打印出 Paul
。