print OUTFILE $line if $results{$line} == 1;
Это будет печатать строки, которые встречаются только один раз.
print OUTFILE $line if $results{$line} > 1;
Одно небольшое изменение (==
до >
), и теперь будет печатать строки, которые встречаются более одного раза,Это должно вывести одинаковые повторяющиеся строки.
О, также, если вы хотите подсчитать, просто сделайте:
if ( $results{$line} > 1 ) {
print OUTFILE "$results{$line}: ", $line;
}
Я написал здесь более краткую и более гибкую версию.Он принимает необязательные имена файлов и печатает в STDOUT.
Вы можете поставить 0
вместо одного из имен, чтобы сравнить один из файлов с другим.Используйте перенаправление оболочки для сохранения в файл.
Использование:
$ script.pl file1.txt file2.txt > outfile.txt
Код:
use strict;
use warnings;
use autodie;
my $f1 = shift || "/opt/test.txt";
my $f2 = shift || "/opt/test1.txt";
my %results;
open my $file1, '<', $f1;
while (my $line = <$file1>) { $results{$line} = 1 }
open my $file2, '<', $f2;
while (my $line = <$file2>) { $results{$line}++ }
foreach my $line (sort { $results{$b} <=> $results{$a} } keys %results) {
print "$results{$line}: ", $line if $results{$line} > 1;
}