Vergleich der Zeilen in einer Datei mit perl
Ich habe versucht zu vergleichen, die Linien zwischen zwei Dateien und passende Zeilen, die identisch sind.
Aus irgendeinem Grund den code unten immer nur geht durch die erste Zeile der 'text1.txt" und druckt die 'if' - Anweisung, unabhängig davon, ob die beiden Variablen passen oder nicht.
Dank
use strict;
open( <FILE1>, "<text1.txt" );
open( <FILE2>, "<text2.txt" );
foreach my $first_file (<FILE1>) {
foreach my $second_file (<FILE2>) {
if ( $second_file == $first_file ) {
print "Got a match - $second_file + $first_file";
}
}
}
close(FILE1);
close(FILE2);
- Bitte posten gesetzlichen Perl-syntax (d.h., der code kann ausgeführt werden).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie strings vergleichen, verwenden Sie die
eq
Betreiber."=="
vergleicht Argumente numerisch.Hier ist ein Weg, um die Arbeit zu tun, wenn Ihre Dateien nicht zu groß sind.
Besser und schneller (aber weniger Speicher effizient) Ansatz wäre, zu Lesen, eine Datei in einen hash und suchen Sie nach Zeilen in der hash-Tabelle. Diese Weise gehen Sie über jede Datei nur einmal.
Müssen Sie wieder zu öffnen oder zurücksetzen der Zeiger der Datei 2. Bewegen Sie den
open
undclose
Befehle innerhalb der Schleife.Ein effizienter Weg, dies zu tun, je nach Datei und Nennweiten, wäre nur eine Schleife durch die Dateien einmal mit und speichert jede Zeile, die Auftritt, in der Datei 1 in ein hash. Prüfen Sie dann, ob die Linie war da für jede Zeile in Datei 2.
Wenn Sie möchten, die Anzahl der Zeilen,
Wenn Sie möchten, dass die übereinstimmenden Zeilen,
Wenn Sie möchten, dass die Linien, die nicht übereinstimmen,
Dies ist ein Skript, das ich schrieb, dass versucht, um zu sehen, wenn zwei Datei sind identisch, obwohl es könnte leicht durch geändert durch spielen mit dem code und wechseln Sie zu eq. Tim schlug vor, über einen hash-würde wahrscheinlich effektiver sein, obwohl Sie konnte nicht gewährleisten, wurden die Dateien, die verglichen werden in der Reihenfolge, wie Sie eingefügt wurden, ohne mit einem CPAN-Modul (und wie Sie sehen können, sollte diese Methode wirklich verwenden Sie zwei Schleifen, aber es war ausreichend für meine Zwecke). Das ist nicht gerade die größte Skript immer, aber es kann Ihnen ja irgendwo anfangen.
Unter den code, den Sie geschrieben, und verwandelt es in die eigentliche Perl-code, das ist, was ich kam mit.
Nun, was Sie möglicherweise wirklich wollen, ist ein diff der beiden Dateien, das ist am besten Links zu Text::Diff.