2013-01-22 31 views
11

mam dwa pliki tekstowe, które zawierają unikalną posortowaną listę słów:bash: porównanie wierszy z dwóch plików

Plik 1:

a 
b 
c 
d 

Plik 2:

b 
c 

muszę nowy plik zawierający tylko linie obce w pliku 1, więc wynik będzie

a 
d 
+2

możliwe duplikat: http: // stackoverflow .com/questions/4078933/find-difference-between-two-text-files-with-one-item-per-line –

Odpowiedz

14

To co comm jest dla:

komunikator - wybrać lub odrzucić linie wspólne dla obu plików

Chcesz

comm -23 "File 1" "File 2" 

które będą tłumić wyjście linie tylko w pliku 2 i linii w obu plikach, pozostawiając jedynie linie w pliku 1. więcej odpowiedzi here on Greg Wooledge's wiki

+0

To jest właściwe narzędzie do tej pracy; to jest dokładnie to, do czego został zaprojektowany. –

2

Można użyć grep:

grep -f file1.txt -vFx file2.txt 

Wskazówka korzystanie z flagami F, --fixed-strings i x, --line-regexp, aby wymusić porównania mają być wykonane biorąc pod uwagę całą linię.

+1

Dziękujemy s, działa to również: 'sort file1.txt file2.txt file2.txt | uniq -u' –

2

Spróbuj

$ join file1.txt file2.txt -v 1

$ man join

-a FILENUM 
    print unpairable lines coming from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2 
-v FILENUM 
    like -a FILENUM, but suppress joined output lines 
Powiązane problemy