2つのファイルがあります。
ファイル1.txt
30 40 A T match1 string1
45 65 G R match2 string2
50 78 C Y match3 string3
ファイル2.txt
match1 60 add1 50 add2
match2 15 add1 60 add2
match3 20 add1 45 add2
以下のような出力を得たいです。
30 40 A T match1 string1 60 add1
45 65 G R match2 string2 15 add1
50 78 C Y match3 string3 20 add1
file1.txtの列5に一致するものがある場合は、file2.txtの列2と3をfile1.txtの末尾に追加したいと思います。
この結合コマンドを試してみました。
join -1 5 -2 1 -a 1 -o 1.1 -o 1.2 -o 1.3 -o 1.4 -o 1.5 -o 1.6 -o 2.2 -o 2.3 file1.txt fil2.txt
しかし、これは最初のファイルの列だけを印刷するようです。この問題を解決するためにJoinに加えて他の解決策はありますか?
答え1
あなたはできます:
join -1 5 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 file1.txt file2.txt
例:
% cat f1.txt
30 40 A T match1 string1
45 65 G R match2 string2
50 78 C Y match3 string3
% cat f2.txt
match1 60 add1 50 add2
match2 15 add1 60 add2
match3 20 add1 45 add2
% join -1 5 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 f1.txt f2.txt
30 40 A T match1 string1 60 add1
45 65 G R match2 string2 15 add1
50 78 C Y match3 string3 20 add1
答え2
解決策が見つかりました。
awk -F "\t" 'FNR==NR {a[$1] = $2 "\t" $3;next} $5 in a{print $0 "\t" a[$5]}' file2.txt file1.txt > outing.txt