Wie kann ich vergleichen von zwei Dateien und zeigt Unterschiede in Perl?
Ich bin versucht, zu schreiben Perl-Skript zum vergleichen der Inhalte von 2 Dateien, so das man die Liste die Unterschiede gesehen. Versuchen Sie die folgende, aber ich bin nicht sicher, wie weiter. Beachten Sie, dass die folgenden ist nur ein Teil des Skriptes, wie ich sortiert haben, der Inhalt der 2 Dateien vorher. Vielen Dank im Voraus.
open (FILE1, "log") || die ("Can't open file log for reading") ;
open (FILE2, "master") || die ("Can't open file master for reading") ;
@file1 = <FILE1> ;
@file2 = <FILE2> ;
#$perlcompare = (compare('log','master')== 0) ;
#die ("Log and master files are equal and match.\n") ;
if (@file1 eq @file2) {
print "Log and master are equal and match.\n" ;
} else ????????????
exit 0;
Tun Sie vergleichen möchten, und die Dateien Zeile für Zeile und drucken Sie die Zeilen, die nicht passen? Können Sie nicht verwenden, diff-Dienstprogramm in der OS oder md5sum, wenn Sie wollen einfach nur wissen, ob die Dateien gleich sind oder nicht?
Fragte und antwortete: stackoverflow.com/questions/3581749/...
Fragte und antwortete: stackoverflow.com/questions/3581749/...
@file1 eq @file2
nur überprüft, dass Sie die gleiche Anzahl von Zeilen. @file1 ~~ @file2
vergleichen Sie die Inhalte. Wenn Sie verwenden Text::Diff als Sinan beantwortet, brauchen Sie nicht zu tun eine zusätzliche Kontrolle bei allen.InformationsquelleAutor Grace | 2011-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen, um zu bleiben in Perl, es ist File::Compare, die nur die Dateien vergleichen.
Für zeigen Unterschiede, es gibt Text::Diff.
- Ausgang
Vielen Dank für den Hinweis. Irgendwie habe ich es verpasst das erste mal Las ich die Frage.
Vielen Dank für die Antwort, ich habe das diff-Modul wie folgt, wenn er vergleichen, aber ich möchte die Ausgabe so, dass es nur die unmatch Sachen, wie ich gerne zeige Datei 1 (log) zeigen extra was posten oder fehlt was Sache vergleichen zu Datei2. Darf ich wissen, irgendwelche Tipps, um auf diese Arbeit? open OUTPUT, ">output2" ; $diffs = diff 'log' => 'Liste' ; print OUTPUT $diffs ; close OUTPUT ;
InformationsquelleAutor Sinan Ünür
Wenn Sie können, verwenden Sie nichts anderes als perl -, würde ich empfehlen, diff(1) oder comm(1)
Ich bin mit dem if (@file1-eq @file2) { print "Log und master sind gleich und passen.\n" ; } else XXXXX in meinem Skript, es kann in der Tat korrekt ausgeführt, wenn die 2-Datei übereinstimmen. Ich nehme an, das "eq" - Befehl wird wieder "0", wenn es eine unmatch. So, war thinkking zu legen sonst wenn der Zustand "0" ist, dann wird es gehen, greifen die unmatch string... aber nicht sicher, wie es weitergehen soll. Auch wurde gefragt, ob die "eq" - Befehl ist die Prüfung im gesamten Dokument der es halt aus, wenn es die ersten unmatch.
Was ist Ihr Fehler ? comm kommt mit coreutils, da sehe ich auf archlinux
nicht vergleichen Sie den Inhalt des arrays. Versuchen
perl -we '@a=(1,2); @b=(3,4); print "yes" if @a eq @b;'
eq
stellt die arrays in Skalare Kontext, was bedeutet, dass Ihre Größe verglichen, nicht deren Inhalt. Sie kann jedoch vergleichen die arrays mit smart-matching, z.B.@a ~~ @b
.InformationsquelleAutor Gilles Quenot
InformationsquelleAutor Chankey Pathak