问题澄清后编辑:所有文件中的唯一元素,以及它出现的文件:
cat File_A File_B File_C File_D |sort | uniq -u | while read line ; do file=`grep -l $line File*` ; echo "$file $line" ; done
编辑:
如果文件很大,这样做会更快:
#!/usr/bin/perl
use strict;
use autodie;
my $wordHash ;
foreach my $arg(@ARGV){
open(my $fh, "<", $arg);
while(<$fh>){
chomp;
$wordHash->{$_}->[0] ++;
push(@{$wordHash->{$_}->[1]}, $arg);
}
}
for my $word ( keys %$wordHash ){
if($wordHash->{$word}->[0] eq 1){
print $wordHash->{$_}->[1]->[0] . ": $word\n"
}
}
执行为:myscript.pl filea fileb filec ... filezz
澄清之前的东西:
使用 shell 命令很容易。所有文件中的非重复元素
cat File_A File_B File_C File_D |sort | uniq -u
所有文件中的唯一元素
cat File_A File_B File_C File_D |sort | uniq
每个文件的唯一元素(编辑感谢@Dennis Williamson)
for line in File* ; do echo "working on $line" ; sort $line | uniq ; done