比较两个文件并在匹配后打印匹配行和一些行


Compare two files and print matching lines with some lines after match

我有两个文件file1.txt和file2.txt。

文件1.TXT

1
2
3
DS496218    40654   42783  
DS496218    40654   42783
DS496218    40654   42783

文件2.TXT

1
2
3
4
5
6
7
8
9
10
11
12
13
###
DS496108    ena gene    99942   102567  .   -      
DS496128    ena mRNA    99942   102567  .   -      
DS496118    ena three_prime_UTR 99942   100571  
###
DS496218    ena gene    40654   42783   .   -      
DS496108    ena mRNA    99942   102567  .   -      
DS496108    ena three_prime_UTR 99942   100571      
###
DS496128    ena gene    99942   102567  .   -      
DS496133    ena mRNA    99942   102567  .   -      
DS496139    ena three_prime_UTR 99942   100571  
###

我想将file1.txt的第1、2和3列与file2.txt的第1、4和5列匹配。如果匹配,则打印匹配行到###,但不要打印###。我用"awk"命令试过了

1
awk -F'\t' 'NR==FNR{c[$1$2$3]++;next};c[$1$4$5] > 0' file1.txt file2.txt > out.txt.


在没有看到预期输出的情况下,这是一个猜测,但听起来这正是您想要的:

1
2
3
4
5
6
awk '
NR==FNR { a[$1,$2,$3]; next }
($1,$4,$5) in a { found=1 }
/^###/ { found=0 }
found
' file1 file2