Wie man zwei Dateilisten unterscheidet und den Ort in der Liste ignoriert

8

Ich habe zwei Listen von Dateien, die ich unterscheiden möchte. Die zweite Liste hat mehr Dateien, und weil sie alle in alphabetischer Reihenfolge sind, wenn ich diese zwei Listen diff gebe, erhalte ich Dateien (Zeilen), die in beiden Listen existieren, aber an einer anderen Stelle.

Ich möchte diese beiden Listen unterscheiden, indem ich den Zeilenplatz in der Liste ignoriere. Auf diese Weise würde ich nur die neuen oder fehlenden Zeilen in der Liste bekommen.

Danke.

    
Nir 16.09.2010, 08:04
quelle

6 Antworten

3

Für das Beispiel geben Sie @Sparr

an

a enthält

%Vor%

b enthält

%Vor%

diff a b gibt

%Vor%

Was ist mit dieser Ausgabe, die Ihren Anforderungen nicht entspricht?

    
Beano 16.09.2010, 08:57
quelle
18

Sie können diesen Ansatz versuchen, indem Sie die beiden Listen wie folgt subtrahieren:

%Vor%

1) drucke alles in Datei2, das nicht in Datei1 ist, d. h. Datei2 - Datei1

%Vor%

2) Alles in Datei1 drucken, das nicht in Datei2 ist, d. h. Datei1 - Datei2

%Vor%

(Sie können dann mit diesen Diffs machen, was Sie wollen, z. B. in Datei schreiben, sortieren usw.)

grep Optionsbeschreibungen:

%Vor%     
dogbane 16.09.2010 09:13
quelle
11

Gehen Sie folgendermaßen vor:

cat datei1 datei2 | sortieren | uniq -u

Dies wird Ihnen eine Liste von Zeilen geben, die eindeutig sind (dh nicht dupliziert).

Erläuterung:
        1) cat file1 file2 speichert alle Einträge in einer Liste         2) sortieren wird die kombinierte Liste sortieren         3) uniq -u gibt nur die Einträge aus, die keine Duplikate haben

    
No One in Particular 16.09.2010 09:34
quelle
4

Der richtige Befehl, der hier verwendet werden soll, ist der demütige Befehl comm :

Um dies zu demonstrieren, erstellen wir zwei Eingabedateien:

%Vor%

Verwenden Sie nun den Befehl comm , um die gewünschte Frage zu erhalten:

%Vor%

Dies zeigt eine Spaltenausgabe mit fehlenden Dateien (Zeilen in a , aber nicht in b ) in der ersten Spalte und extra Dateien (Zeilen in b , aber nicht in a ) in der zweiten Spalte.

Was genau macht comm ?

Hier ist die Ausgabe, wenn der Befehl ohne Schalter eingegeben wird:

%Vor%

Dies zeigt drei Spalten also:

  1. Zeilen in a , aber nicht in b
  2. Zeilen in a und b
  3. Zeilen in b , aber nicht in a

Was die nummerierten Schalter -123 tun, ist blendet die angegebene Spalte in der Ausgabe aus.

Also zum Beispiel:

  • Die Angabe von -13 führt nur zu gemeinsamen Zeilen
  • Die Angabe von -12 ergibt nur Zeilen in b
  • Die Angabe von -23 ergibt nur Zeilen in a
  • Die Angabe von -2 führt zur symmetrischen Differenz
  • Die Angabe von -123 führt zu keiner Ausgabe
antak 28.11.2016 02:56
quelle
0

Wenn die Zeilen sortiert sind, sollte diff die Einfügungen und Löschungen gut erfassen und nur die Unterschiede anzeigen.

    
Sparr 16.09.2010 08:05
quelle
0

Wenn Sie die zwei Listen sortieren, bevor Sie sie differentieren, erhalten Sie nützlichere Vergleichsdaten.

    
pyfunc 16.09.2010 08:06
quelle

Tags und Links