基于两个键列连接两个文件 awk

基于两个键列连接两个文件 awk

我一直在尝试根据两个关键列(染色体和位置)合并两个大文件,我发现最有效的方法似乎是awk.

我的文件的示例如下:

file1.txt
Gene_ID Chromosome Position Fst
ENSG00000141424 18 33688658 0
ENSG00000141424 18 33688669 0
ENSG00000141424 18 33688681 0
ENSG00000141424 18 33688683 0.0111734
ENSG00000141424 18 33688720 0
ENSG00000141424 18 33688726 0
ENSG00000141424 18 33688743 0
ENSG00000141424 18 33688745 0
ENSG00000141424 18 33688763 0

另一个文件:

file2.txt
Chromosome Start End Ref Alt RS_ID
1   10019   10020   TA  T   rs775809821
1   10020   10020   A   -   rs775809821
1   10055   10055   -   A   rs768019142
1   10055   10055   T   TA  rs768019142
1   10108   10108   C   T   rs62651026
1   10109   10109   A   T   rs376007522
1   10128   10128   A   AC  rs796688738
1   10128   10128   -   C   rs796688738
1   10139   10139   A   T   rs368469931
1   10144   10145   TA  T   rs144773400

我想要第三个文件,如下所示:

Gene_ID Chromosome Position RS_ID Fst
ENSG00000141424 18 33688658 rs1504554... 0

我尝试过使用awk,我认为语法没问题,但我得到的是一个包含file1.txtfile2.txt连接的文件。

awk  'FS=" "; OFS=" ";NR=FNR{A[$1,$2]=$6;next}{$5=A[$2,$3];print}' file1.txt file2.txt > file3.txt

我可能做错了什么有什么想法吗?

答案1

对代码进行一些修正应该可以修复它

awk 'NR==FNR{A[$1,$2]=$6;next}{$5=A[$2,$3];if($5!="")print}' file2.txt file1.txt
  • NR==FNR而 ofNR=FNR是 awk 运行第一个文件时的条件file2.txt
  • 在第二次运行时,NR!=FNR如果存在连接键,则打印出该行A
  • awk 的默认字段分隔符已经是空格,因此无需在此处指定它们

相关内容