2010-04-23 11 views
5

Zrobiłem kilka wyszukiwania tego, ale nie mogę znaleźć, co jestem po, w szczególności.Skorupa powłoki - porównywanie wierszy tekstu, usuwanie dopasowań

Mam dwa pliki: "a.txt", "b.txt".

Każda zawiera listę adresów e-mail oddzielonych znakami nowej linii.

Dla wszystkich linii w "a.txt", muszę sprawdzić dopasowanie w dowolnym miejscu w "b.txt". Jeśli tak, adres e-mail w pliku "a.txt" musi zostać usunięty.

(Alternatywnie, nowy plik „c.txt” może być utworzony z wyjściem, jeśli jest to łatwiejsze.)

Używam Mac OS X, więc szukam skryptu powłoki, które mogą pomóc, lub wskazówki na temat tego, jak zbudować skrypt. Dzięki za pomoc.

Odpowiedz

3
grep -F -x -f b.txt -v a.txt > c.txt 

lub, równoważnie,

fgrep -x -f b.txt -v a.txt 
+0

Bardzo dziękuję wszystkim, którzy w tym pomogli. Użyłem tej konkretnej wskazówki, ale bardzo doceniam pomoc każdego. – SirRatty

2

Zastosowanie comm polecenie tak:

cat a.txt | sort > a2.txt 
cat b.txt | sort > b2.txt 
comm -23 a2.txt b2.txt > c.txt 
0
awk 'FNR==NR{_[$1];next}(!($1 in _))' b.txt a.txt > c.txt 
0

Lubię odpowiedź grep/fgrep, ale tu jest inny kot/sort opcja :

cat a.txt b.txt | sort -u > c.txt 
+0

to nie jest to, czego szuka OP. – ghostdog74

+0

oops. Masz rację; Przeczytałem post całkowicie błędny. Przepraszam SirRatty! –