如果在文件2中它们是前缀的,如何从文件2中删除文件1中包含的行?

时间:2017-04-01 21:43:36

标签: linux shell grep

我有以下情况:

的Source.txt

ID1:email1@domain1.com
ID2:email2@domain2.com
ID3:email3@domain3.com
...

ID是数字字符串,例如123423412897 ...(一个或多个数字)。

exclude.txt

emailX@domainX.com
emailY@domainY.com
emailZ@domainZ.com
...

即。只有电子邮件,没有ID。

我想删除 source.txt 中包含 exclude.txt 中列出的电子邮件的所有行,同时保留非ID:email对的行除去。

如何使用linux命令行工具(如果需要,还是简单的bash脚本)?

1 个答案:

答案 0 :(得分:2)

您可以使用awk轻松完成:

awk -F":" 'NR==FNR{a[$1];next}(!($2 in a))' exclude.txt source.txt

替代grep:

grep -v -F -f exclude.txt source.txt

小心使用grep,因为grep执行正则表达式匹配。您可能还需要将-w选项添加到grep(单词匹配)