質問が明確になった後に編集する:すべてのファイルにまたがる固有の要素、およびそれが発生するファイル:
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
明確化前のもの:
シェルコマンドで十分簡単。すべてのファイルで繰り返されない要素
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