删除文件 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 >> 新文件;完成
我有 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 >> 新文件;完成