为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何从另一个文件A中删除B文件中出现的行?

请问如何从另一个文件A中删除B文件中出现的行?

哈士奇WWW 2019-08-02 02:01:48
如何从另一个文件A中删除B文件中出现的行?我有一个大的文件A(由电子邮件组成),每封邮件一行。我还有另外一个档案B里面有另一组邮件。我将使用哪个命令从文件A中删除文件B中出现的所有地址。因此,如果A文件包含:A B C文件B载有:B     D E然后文件A应保留如下:A C现在我知道这个问题可能会被问得更多,但我发现一个在线命令这给了我一个错误的分隔符。任何帮助都将不胜感激!肯定有人会想出一个聪明的内线,但我不是贝壳专家。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

comm -23 file1 file2

-23将取消两个文件中的行,或仅位于文件2中的行。必须对文件进行排序(在您的示例中),但如果不是,则将它们通过管道。sort首先.。

手册页


查看完整回答
反对 回复 2019-08-03
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

去营救!

此解决方案不需要排序输入。你必须先提供文件B。

awk 'NR==FNR{a[$0];next} !($0 in a)' fileB fileA

回报

A
C

它怎麽工作?

NR==FNR{a[$0];next}成语用于将第一个文件存储在关联数组中,作为以后的“包含”测试的键。

NR==FNR正在检查是否正在扫描第一个文件,其中全局行计数器(NR)等于当前文件行计数器(FNR)。

a[$0]将当前行作为键添加到关联数组中,请注意,它的行为类似于一个集合,其中不会有任何重复的值(键)。

!($0 in a)我们现在下一个档案里,in是一个包含测试,在这里它检查当前行是否在我们从第一个文件的第一步中填充的集合中,!否定了条件。这里缺少的是操作,默认情况下它是{print}而且通常没有写得很清楚。

请注意,这现在可以用来删除黑名单上的单词。

$ awk '...' badwords allwords > goodwords

只要稍加修改,它就可以清理多个列表并创建已清理的版本。

$ awk 'NR==FNR{a[$0];next} !($0 in a){print > FILENAME".clean"}' bad file1 file2 file3 ...




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 458 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信