2010-04-23 99 views
5

我已经完成了一些搜索,但是找不到我之后的具体内容。Shell脚本 - 比较文本行,删除匹配项

我有两个文件:“a.txt”,“b.txt”。

每个都包含一个由换行符分隔的电子邮件地址列表。

对于“a.txt”中的所有行,我需要检查“b.txt”中任何地方的匹配。如果是这样,则需要删除“a.txt”中的电子邮件地址。

我使用的是Mac OS X的,所以要寻找一个shell脚本,可以帮助(或者,一个新的文件“c.txt”可以与输出,如果这是更容易。创建)或者指导我如何构建脚本。谢谢你的帮助。

回答

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

,或者等价地,

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

非常感谢所有帮助过这个的人。我使用了这个特别的提示,但非常感谢大家的帮助。 – SirRatty 2010-04-23 04:35:31

2

使用comm命令是这样的:

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

我喜欢的grep/fgrep一样的答案,但这里是另一个猫/排序选项:

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

这不是OP正在寻找的东西。 – ghostdog74 2010-04-23 04:27:31

+0

oops。你是对的;我看完帖子完全错了。对不起SirRatty! – 2010-04-23 04:31:57