Analiza dwóch plików wejściowych i porównanie istnienia linii

1

Muszę wziąć dwa pliki tekstowe i sprawdzić, czy linia istniejąca w pliku A nie istnieje nigdzie w pliku B.

Każdy wiersz w pliku A, który nie istnieje w pliku B, należy skopiować do dziennika wyjściowego.

Mój przyjaciel zasugerował SED, ale nigdy wcześniej go nie użyłem, więc jak miałbym to zrobić?

Philos
źródło

Odpowiedzi:

2

Wygląda na to, że linie mają być unikalne, a kolejność nie ma znaczenia, więc spróbuj tego:

sort fileA > fileA.sort
sort fileB > fileB.sort
diff fileA.sort fileB.sort | sed -n "/^</{s/< //;p}"
Nicole Hamilton
źródło
1

Linie, które istnieją tylko w pliku A:

comm -23 <(sort fileA) <(sort fileB) > output.txt

Wszystkie wiersze unikalne dla pliku A zostaną zapisane w pliku output.txt.

Glenn Jackman
źródło
Podstawianie procesów za pomocą <(...)notacji jest eleganckim rozwiązaniem. Pomyślałem o zasugerowaniu tej formy, ale to tylko bash, a nie inne powłoki, i nie było jasne, jakiej powłoki używa OP.
Nicole Hamilton,