2つのファイルがあります。
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
2つのファイルをフィールド1と2に1つにマージしたいと思います。
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
2番目のファイルに欠落している行はありますか? 「TG」または「AT」の項目は表示されません。私が知っているjoin
限り、2つのフィールドは許可されず、sedを使用して2つのフィールドをリンクできます。具体的な例の例は次のとおりです。
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の構文と仕組みの詳細については、以下を参照してください。スタックオーバーフローのawk情報ページ
ここで: