Vergleichen Sie zwei Java-Eigenschaftendateien mit Shell-Skript

8

Wie man zwei Eigenschaftendateien in zwei verschiedenen Ordnern mit Shell-Skript vergleicht Eingabe kann Pfad der beiden Ordner sein?

Es gibt mehrere Dateien in beiden Ordnern und jede Datei muss überprüft werden

    
vetri02 28.10.2009, 10:40
quelle

7 Antworten

16

Sie müssen wahrscheinlich Ihre Anforderungen ein wenig mehr erklären. Es ist jedoch sehr wahrscheinlich, dass Sie mit dem Befehl diff (mit ein wenig Hilfe von sort und / oder grep) machen können, was Sie wollen.

Nehmen wir an, Sie haben zwei Dateien: a.properties und b.properties

Wenn Sie nur wissen möchten, ob die Dateien in irgendeiner Weise anders sind, können Sie

verwenden %Vor%

Sie erhalten keine Ausgabe, wenn sie identisch sind oder eine Liste von Unterschieden.

Wenn Sie einen Vergleich auf einer semantischeren Ebene wünschen, dh wenn die beiden Sätze von Eigenschaften identisch sind, dann müssen Sie ein bisschen mehr tun. Die Dateien können sich textlich unterscheiden, bedeuten aber dasselbe für Java-Programme, die sie verwenden. Zum Beispiel können die Eigenschaften in einer anderen Reihenfolge auftreten. Es kann Leerzeilen, andere Leerzeichen und Kommentare geben.

Wenn das der Fall ist, interessiert es dich, ob die Kommentare identisch sind? Sie werden die Operation Ihres Programms nicht beeinflussen, aber sie haben eine Bedeutung (und einen Wert für diejenigen, die die Datei lesen). Wenn es Ihnen egal ist, streichen Sie sie aus.

Sie interessieren sich wahrscheinlich nicht für Leerzeilen, da sie keine Bedeutung haben.

Sie müssen auch den folgenden Fall behandeln:

%Vor%

Erneut, textuell unterschiedlich (beachten Sie die Leerzeichen um den equals), haben aber in Java dieselbe Bedeutung.

Beginnen wir einfach, nehmen wir an, dass die Eigenschaften in der gleichen Reihenfolge auftreten.

Leerzeilen ignorieren:

%Vor%

Behandeln Sie zufällige Leerzeichen (z. B. um das Gleichheitszeichen)

%Vor%

Kombiniere all das:

%Vor%

Kommentare ausblenden:

%Vor%

Erlaube Eigenschaften in einer anderen Reihenfolge, strip Kommentare:

%Vor%     
dave 28.10.2009, 11:18
quelle
3

Sie sollten sich mit diff oder sdiff beschäftigen. Ich empfehle Ihnen, Ihre Dateien vorher zu sortieren und alle Leerzeilen zu entfernen, um die Lautstärke zu reduzieren. z.B.

%Vor%     
Adamski 28.10.2009 10:53
quelle
3

Verwenden Sie für einen semantischen Vergleich besser PropDiff .

%Vor%     
fglez 01.06.2010 14:58
quelle
1

comm ist ein nützliches Dienstprogramm. Es kann Ihnen sagen, was in Datei1 und nicht in Datei2 ist, was in Datei2 und nicht in Datei1 ist und was zwischen den beiden Dateien gemeinsam ist. Es erfordert, dass die zwei Dateien zuerst sortiert werden.

Ich habe @antispams PropDiff geantwortet, da es genau das zu sein scheint, was du verlangst.

    
glenn jackman 25.03.2011 15:13
quelle
0

Versuchen Sie, das diff-Programm zu verwenden, rufen Sie "diff / path / to / first / Datei / Pfad / zu / Sekunde / Datei" auf und cat a grep sie. Für spezielle Verwendungen von diff (wenn Sie etwas besonderes brauchen), versuchen Sie, man diff.

zu suchen     
Garret Raziel 28.10.2009 10:51
quelle
0

Hängt davon ab, was Sie wollen. Ist ein anderer Kommentar ein Unterschied? Leerzeichen? Auftrag? Ich denke am einfachsten wäre ein kleines grooviges Skript. Ist das eine Option? Wenn nicht, stellen Sie sicher, dass Kommentare und Whitespaces entfernt werden und sortieren Sie die Ausgabe, bevor Sie diff

verwenden

BEARBEITEN: Während es möglich ist, Diff Leerzeichen zu ignorieren, bin ich mir nicht sicher, ob dies das ist, was Sie wollen, da Leerräume Teil eines Eigenschaftswertes sein könnten

    
sfussenegger 28.10.2009 10:54
quelle
0

Siehe einen anderen PHP-Code, um Eigenschaftendateien über hier

zu verteilen %Vor%     
LouiSe 25.03.2011 14:41
quelle

Tags und Links