2010-04-23 4 views
5

Ho cercato di farlo ma non riesco a trovare quello che sto cercando, in particolare.Script di shell - confronto di righe di testo, eliminazione di corrispondenze

Ho due file: "a.txt", "b.txt".

Ciascuno contiene un elenco di indirizzi e-mail, separati da una nuova riga.

Per tutte le righe in "a.txt", ho bisogno di verificare una corrispondenza ovunque in "b.txt". Se è così, l'indirizzo email in "a.txt" deve essere rimosso.

(In alternativa, un nuovo file "c.txt" può essere creato con l'uscita se questo è più facile.)

Sto utilizzando Mac OS X, quindi sono alla ricerca di uno script di shell che potrebbe aiutare, o puntatori a come andrei a costruire la sceneggiatura. Grazie per qualsiasi aiuto.

risposta

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

o, equivalentemente,

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

Grazie mille a tutti coloro che hanno contribuito a questo. Ho usato questo suggerimento particolare, ma apprezzo molto l'aiuto di tutti. – SirRatty

2

Usa comm comando come questo:

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

mi piace la risposta grep/fgrep, ma qui è un'altra/sorta opzione cat :

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

non è quello che l'OP sta cercando. – ghostdog74

+0

oops. Hai ragione; Ho letto il post completamente sbagliato. Scusa SirRatty! –

Problemi correlati