Wszystko poniżej są kopiowane bezpośrednio z @ TomOnTime za ServerFault odpowiedź here:
Pokaż linie, które istnieją tylko w pliku a: (np. co został usunięty z)
comm -23 a b
Pokaż linie, które istnieją tylko w pliku B: (czyli to, co zostało dodane do B)
comm -13 a b
Pokaż linie, które istnieją tylko w jednym pliku lub inny: (ale nie oba)
comm -3 a b | sed 's/^\t//'
(Uwaga: Jeśli plik a
ma linii, które zaczynają zakładce (pierwszy TAB). zostanie usunięty z wyjścia)
UWAGA: Oba pliki należy posortować, aby "comm" działał prawidłowo. Jeśli nie są już klasyfikowane, należy je posortować:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Jeśli pliki są bardzo długo, może to być sporym obciążeniem, ponieważ wymaga dodatkowej kopii, a więc dwa razy więcej miejsca na dysku.
Edit: pamiętać, że polecenie może być napisany bardziej zwięźle stosując podstawienie procesu (dzięki @phk dla komentarzu):
comm -12 <(sort < a) <(sort < b)
są wszystkie dodane linie w A2 nowe dla pliku? Mam na myśli brak duplikatów z istniejącymi liniami? – Kent
@kent no duplicates – user1004985