我一直在尝试根据两个关键列(染色体和位置)合并两个大文件,我发现最有效的方法似乎是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.txt
并file2.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 的默认字段分隔符已经是空格,因此无需在此处指定它们