タブで区切られた2列のファイル「cluster-refSeq.csv」があり、次のような何千ものエントリがあります。
chr10_100486611_100486680_+ NM_053314
chr10_102864904_102865004_- NM_001013042
chr10_103280127_103280156_- NM_001013042
ここで、「クラスター」列のエントリは一意ですが、複数のrefSeqにリンクできます。
次のような何千ものエントリを含む別のファイル「refSeq-symbol.csv」があります。
NM_053314 Kcnj16
NM_053316 Ip6k1
NM_053317 Nr0b1
ここで、refSeq列のエントリは一意ですが、記号以外にリンクすることができます。
これらの各ファイルの行は一意です(重複するエントリはありません)。
これらの2つのファイルを結合して、最初のファイルのクラスターエントリがrefseqエントリを介して2番目のファイルのシンボルエントリにリンクされるようにします。可能な限り有効な組み合わせが必要です。私が欲しいのはLEFTOUTERJOINだと思います。
必要な出力は次のようになります。
chr10_100486611_100486680_+ NM_053314 Kcnj16
私はsqliteでそれをやろうとしました:
create table alpha (cluster text, refseq text);
create table beta (refseq text, symbol text);
.separator "\t"
.import cluster-refSeq.csv alpha
.import refSeq-symbol.csv beta
select alpha.cluster, alpha.refseq, beta.symbol from alpha left outer join beta on alpha.refseq=beta.refseq;
これは私が望む出力を生成します(私は思う)が、重複したエントリが含まれています!
つまり、sortとuniqを使用して出力を実行すると、トリプレットが少なくなります。
私の質問は次のとおりです:私は実際に上記のsqliteコードで行っていると思うことを行っていますか?なぜ重複した出力行を取得するのですか?sqliteコードを修正するにはどうすればよいですか?