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.
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%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
comm
: Um dies zu demonstrieren, erstellen wir zwei Eingabedateien:
%Vor% Verwenden Sie nun den Befehl comm
, um die gewünschte Frage zu erhalten:
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.
comm
? Hier ist die Ausgabe, wenn der Befehl ohne Schalter eingegeben wird:
%Vor%Dies zeigt drei Spalten also:
a
, aber nicht in b
a
und b
b
, aber nicht in a
Was die nummerierten Schalter -123
tun, ist blendet die angegebene Spalte in der Ausgabe aus.
Also zum Beispiel:
-13
führt nur zu gemeinsamen Zeilen -12
ergibt nur Zeilen in b
-23
ergibt nur Zeilen in a
-2
führt zur symmetrischen Differenz -123
führt zu keiner Ausgabe