如果找到匹配字段,则删除要删除的行

时间:2016-03-17 18:47:18

标签: regex awk

如果在file2中找到匹配项,我正尝试删除file1中的一行。 file2中的匹配位于$5之前的特定字段-中。下面的awk没有指定要搜索但正在运行的字段,并且希望是一个开始。谢谢你:)。

文件1

AGRN
ABL
SCN1A

file2的

chr1    955543  955763  chr1:955543-955763  AGRN-6|gc=75
chr1    957571  957852  chr1:957571-957852  AGRN-7|gc=61.2
chr1    970621  970740  chr1:970621-970740  BCR-8|gc=57.1
chr1    976035  976270  chr1:976035-976270  BCR-9|gc=74.5  

所需的输出(AGRN已删除,因为它位于file1

chr1    970621  970740  chr1:970621-970740  BCR-8|gc=57.1
chr1    976035  976270  chr1:976035-976270  BCR-9|gc=74.5 

AWK

awk '!/file1/' file2

2 个答案:

答案 0 :(得分:1)

使用grep

grep -vFf file1 file2

-f从file1读取搜索模式,-v否定匹配意味着如果file1中的某个模式匹配,则从file2中删除行。 -F使用固定字符串进行搜索而不是正则表达式模式。除非您在file1 -F中明确放置正则表达式,否则很可能是您想要的。

答案 1 :(得分:0)

我想出了grep来确认awk ' FILENAME == ARGV[1] {to_remove[$1]=1; next} ! ($5 in to_remove) {print}' file1 file2

{{1}}

再次感谢:)