如何从另一个文件A中删除B文件中出现的行?我有一个大的文件A(由电子邮件组成),每封邮件一行。我还有另外一个档案B里面有另一组邮件。我将使用哪个命令从文件A中删除文件B中出现的所有地址。因此,如果A文件包含:A
B
C文件B载有:B
D
E然后文件A应保留如下:A
C现在我知道这个问题可能会被问得更多,但我发现一个在线命令这给了我一个错误的分隔符。任何帮助都将不胜感激!肯定有人会想出一个聪明的内线,但我不是贝壳专家。
3 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
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 ...
添加回答
举报
0/150
提交
取消