将行保留在单独的列表中

问题描述

我有两个文件

文件1:

##HEADER#########################
##HEADER#########################
1       69078   70017   +       .
1       324295  324394  +       .
1       324428  325605  +       .
1       327735  328214  +       .
1       367646  368605  +       .
1       621093  622042  +       .
1       664485  665108  +       .
1       721405  721918  +       .
1       762080  762571  +       .
1       861308  861407  +       .
1       865533  865718  +       .
1       866395  866494  +       .

文件2:

1       69078   70017  
1       324295  324394
1       762080  762571
1       861308  861407
1       865533  865718

我想在文件1中保留与文件2中的第2列和第3列匹配的行。产生此输出包括标题保留在文件1中):

##HEADER#########################
##HEADER#########################
1       69078   70017   +       .
1       324295  324394  +       .
1       762080  762571  +       .
1       861308  861407  +       .
1       865533  865718  +       .

非常感谢!

我尝试使用此代码

join --header -1 2 -2 2 file1 file2 > output

但是它不能识别多个标题行,并且会创建多个列,而不仅仅是显示的列。

解决方法

您可以使用以下awk:

 awk '{key = $2 OFS $3} NR == FNR{seen[key]; next} FNR <= 2 || key in seen' file2 file1
##HEADER#########################
##HEADER#########################
1       69078   70017   +       .
1       324295  324394  +       .
1       762080  762571  +       .
1       861308  861407  +       .
1       865533  865718  +       .