Shell Script - сравнение строк текста, удаление совпадений - PullRequest
5 голосов
/ 23 апреля 2010

Я немного искал это, но не могу найти то, что мне нужно, в частности.

У меня есть два файла: "a.txt", "b.txt".

Каждый содержит список адресов электронной почты, разделенных новыми строками.

Для всех строк в «a.txt» мне нужно проверить соответствие в любом месте «b.txt». Если это так, адрес электронной почты в «a.txt» необходимо удалить.

(В качестве альтернативы можно создать новый файл "c.txt" с выходными данными, если это проще.)

Я использую Mac OS X, поэтому я ищу сценарий оболочки, который мог бы помочь, или указатели на то, как я собираюсь создать сценарий. Спасибо за любую помощь.

Ответы [ 4 ]

3 голосов
/ 23 апреля 2010
grep -F -x -f b.txt -v a.txt > c.txt

или, что эквивалентно,

fgrep -x -f b.txt -v a.txt
2 голосов
/ 23 апреля 2010

Используйте команду comm следующим образом:

cat a.txt | sort > a2.txt
cat b.txt | sort > b2.txt
comm -23 a2.txt b2.txt > c.txt
0 голосов
/ 23 апреля 2010

Мне нравится ответ grep / fgrep, но есть еще одна опция cat / sort:

cat a.txt b.txt | sort -u > c.txt
0 голосов
/ 23 апреля 2010
awk 'FNR==NR{_[$1];next}(!($1 in _))' b.txt a.txt > c.txt
...