2010-04-23 12 views
5

J'ai fait quelques recherches pour cela, mais je ne trouve pas ce que je suis après, en particulier.Shell Script - comparer des lignes de texte, la suppression des correspondances

J'ai deux fichiers: "a.txt", "b.txt".

Chacun contient une liste d'adresses électroniques, séparées par des retours à la ligne.

Pour toutes les lignes de "a.txt", je dois rechercher une correspondance n'importe où dans "b.txt". Si c'est le cas, l'adresse e-mail dans "a.txt" doit être supprimée.

(Alternativement, pourrait être créé un nouveau fichier « c.txt » avec la sortie si cela est plus facile.)

J'utilise Mac OS X, cherche un script shell qui pourrait aider, ou des pointeurs sur la façon dont je vais construire le script. Merci pour toute aide.

Répondre

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

ou, ce qui revient,

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

Merci beaucoup à tous ceux qui ont aidé avec cela. J'ai utilisé ce conseil particulier, mais j'apprécie grandement l'aide de tout le monde. – SirRatty

2

Utilisez la commande comm comme ceci:

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

J'aime la réponse grep/fgrep, mais voici un autre chat option/genre :

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

ce n'est pas ce que OP recherche. – ghostdog74

+0

oups. Tu as raison; J'ai lu le message complètement faux. Désolé SirRatty! –