删除文件 A 中包含文件 B 中字符串的所有行

Remove all lines in file A which contain the strings in file B

我有 2 个文本文件,我想要文件 A 中包含文件 B 中字符串的删除行

文件A:

joe     ball     1335
john    dyer     1365
dylan   fisher   1795
ian     gill     1913
eric    kelly    1101

文件 B:

1795
1913

我希望 Bash 代码得到这样的结果:

joe     ball     1335
john    dyer     1365
eric    kelly    1101

我尝试了这个代码,但没有找到答案

$ grep -vwF -f A B
$ awk -F'[ ,]' 'FNR==NR{a[];next} !( in a)'
awk  'NR==FNR{a[];next} !( in a)' fileB fileA

它使用space作为字段分隔符,</code>是一行的第一列元素,<code>是该行的第三列元素。 使用数组 a 存储文件 B 元素 a[]。检查 fileA 的第 3 列元素 是否在数组a中,如果不在则打印整行 输出:

joe     ball     1335
john    dyer     1365
eric    kelly    1101

使用grep

$ grep -v -f B A
joe     ball     1335
john    dyer     1365
eric    kelly    1101

这是最简单的,但在某些情况下会产生冲突。如果您先将 B 与例如 sed 稍微混淆(将 space 添加到搜索字符串的开头,将 $ 添加到搜索字符串的末尾):

$ sed 's/$/$/;s/^/ /' B
 1795$
 1913$

并在进程替换中使用它:

$ grep -v -f <(sed 's/$/$/;s/^/ /' B) A
joe     ball     1335
john    dyer     1365
eric    kelly    1101

猫file_B |同时读取值;做 grep $values file_A >> 新文件;完成