我有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)'
答案 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
这是最简单的但会在环境下造成碰撞。如果您首先使用例如B
(sed
添加空格(在开头添加空格,在搜索字符串末尾添加$
):
$ 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;新文件;完成