我有两个文件:
1_file.txt:
ChrX 129759713 A G
ChrX 129760010 C T
ChrX 129762238 C G
ChrX 129762448 A G
ChrX 129762803 A C
ChrX 129763441 C A
ChrX 129764931 T C
ChrX 129767696 C T
ChrX 129818213 C T
ChrX 129841336 T C
2_files.txt:
Chr29 129841336 T C
Chr29 129845233 A G
Chr29 129852688 T C
Chr29 129871602 G T
Chr29 129872683 T C
ChrX 129875545 C A
ChrX 129876975 A G
ChrX 129879796 G A
ChrX 129880521 T C
ChrX 129759713 A G
ChrX 129760010 C T
ChrX 129762238 C G
ChrX 129762448 A G
ChrX 129762803 A C
ChrX 129763441 C A
我想将两个文件按字段一和二合并为一个
The answer
ChrX 129759713 A G
ChrX 129760010 C T
ChrX 129762238 C G
ChrX 129762448 A G
ChrX 129762803 A C
ChrX 129763441 C A
有什么想法如何使用 join 或 awk 来做到这一点?
答案1
第二个文件中是否缺少行?我没有看到带有“TG”或“AT”的。据我所知,join
不接受两个字段,您只需使用 sed 连接两个字段即可。这是您的具体示例的示例:
join -j 1 <(cat 1_file.txt | sed "s/ /_/") <(cat 2_files.txt | sed "s/ /_/")
答案2
通过 awk,您可以使用
awk '
NR == FNR {f1[$1,$2] = $0; next}
$1 SUBSEP $2 in f1 {print f1[$1,$2], $3, $4}
' 1_file.txt 2_files.txt
ChrX 129759713 A G A G
ChrX 129760010 C T C T
ChrX 129762238 C G C G
ChrX 129762448 A G A G
ChrX 129762803 A C A C
ChrX 129763441 C A C A
有关 awk 语法及其工作原理的详细信息,请参阅Stack Overflow 上的 awk 信息页面
这里: