Wyświetlenie wierszy z jednego pliku, jeśli te nie występują w drugim pliku

0

Cześć,

Mam problem z komendą w bashu.

bash\bash.exe -c "comm <(sort -u plik1.txt) <(sort -u plik2.txt)>wynik.txt"

Komenda powinna zwracać wiersze tylko z plik2.txt które nie występują w plik1.txt. Niestety nie chce się wykonać (besh.exe się uruchamia, ale plik wynik.txt nie jest updatowany) i nie wiem w któym miejscu jest błąd.

Taka komenda działa, ale daje błędny wynik

bash\bash.exe -c "plik1.txt plik2.txt>wynik.txt"

Czy ma ktoś pomysł jak w którym miejscu w składni jest błąd?

0

Może tak:

bash\bash.exe -c "comm -13 plik1.txt plik2.txt | sort -u >wynik.txt"

-13 zgodnie z dokumentacją dla comm:

 -1              suppress column 1 (lines unique to FILE1)
 -2              suppress column 2 (lines unique to FILE2)
 -3              suppress column 3 (lines that appear in both files)
0

Dzięki za szybki odzew. Pomogło o tyle, że plik wynik.txt od odpaleniu kodu się aktualizuje, ale zwraca pusty wynik;

plik1.txt

aaa
bbb
ccc
ddd

plik2.txt

ddd
eee
fff

Powinno zwrócić

eee
fff

Niestety, wynik jest pusty

0

To może tak?

bash\bash.exe -c "comm -13 plik1.txt plik2.txt | sort -u ">wynik.txt

Nie korzystam z basha pod windowsem, więc nie wiem w czym może być problem. Jak nie zadziała, to sprawdź czy bez przekierowania zwraca różnicę:

bash\bash.exe -c "comm -13 plik1.txt plik2.txt | sort -u "
0

Niestety pierwszy wciąż nic. Pierwszy nie zwraca roznicy a drugi się uruchamia, i kończy pracę

0

A dane wejściowe masz poprawne? Bo u mnie działa ;-)

[pkw@pkwcent ~]$ cat p1
Linia1
Linia2
LiniaX
LiniaY
[pkw@pkwcent ~]$ cat p2
Linia1
Linia2
LiniaQ
LiniaQ
LiniaQ
[pkw@pkwcent ~]$ comm -13 p1 p2 | sort -u
LiniaQ
[pkw@pkwcent ~]$ 

1 użytkowników online, w tym zalogowanych: 0, gości: 1