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

时间:2016-12-19 06:50:23

标签: bash awk sed grep comm

我有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[$1];next} !($4 in a)'

3 个答案:

答案 0 :(得分:5)

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

它使用空格作为字段分隔符,$1是行的第一个列元素,$3是该行的第3列元素。 使用数组a存储fileB元素a[$1]。检查fileA的第3列元素 是否在数组a中,如果不打印整行 输出:

joe     ball     1335
john    dyer     1365
eric    kelly    1101

答案 1 :(得分:0)

使用grep

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

这是最简单的但会在环境下造成碰撞。如果您首先使用例如Bsed添加空格(在开头添加空格,在搜索字符串末尾添加$):

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

并在流程替换中使用它:

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

答案 2 :(得分:-1)

cat file_B |读取值;做grep $ values file_A&gt;&gt;新文件;完成