2010-04-23 13 views
5

Ich habe ein wenig gesucht, kann aber nicht herausfinden, wonach ich suche.Shell Script - Vergleichen von Textzeilen, Löschen von Treffern

Ich habe zwei Dateien: "a.txt", "b.txt".

Jede enthält eine Liste von E-Mail-Adressen, die durch Zeilenumbrüche getrennt sind.

Für alle Zeilen in "a.txt" muss ich irgendwo in "b.txt" nach einer Übereinstimmung suchen. Ist dies der Fall, muss die E-Mail-Adresse in "a.txt" entfernt werden.

(Alternativ kann eine neue Datei „c.txt“ mit dem Ausgang geschaffen werden könnte, wenn die einfacher ist.)

I Mac OS X bin mit, so dass für einen Shell-Skript suchen, die helfen könnten, oder Hinweise darauf, wie ich das Skript aufbauen würde. Danke für jede Hilfe.

Antwort

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

oder äquivalent

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

Vielen Dank an alle, die dabei geholfen haben. Ich habe diesen speziellen Tipp verwendet, aber ich schätze die Hilfe von allen sehr. – SirRatty

2

Verwenden comm Befehl wie folgt aus:

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

Ich mag die grep/fgrep Antwort, aber hier ist eine andere Katze/Sortieroption :

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

das ist nicht was OP sucht. – ghostdog74

+0

oops. Du hast recht; Ich habe den Beitrag komplett falsch gelesen. Entschuldigung SirRatty! –