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ć?

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}"

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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.