3つの列に基づいて2つの表の重なりを取得したいとします。複数の列とサブストリングによる2つの表の重複の検出
ファイル1
Chr B C Start End F G E D
chr1 HAVANA gene 11869 14409 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
chr1 HAVANA gene 100000 112000 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
chr3 HAVANA gene 11870 14409 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
chr3 HAVANA gene 11839 11869 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
chr2 HAVANA gene 11869 14409 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
....
ファイル2
A B Start End Chr D
ENSG00000177697 ENST00000525333 832986 833026 11 1
ENSG00000197283 ENST00000876382 100000 112000 1 1
ENSG00000194582 ENST00000184632 11869 14409 2 1
ENSG00000174528 ENST00000241053 154728 184728 12 1
ENSG00000103629 ENST00000816493 832986 917483 13 1
ENSG00000183628 ENST00000816472 711633 782163 11 1
ENSG00000192748 ENST00000164924 832986 982732 CHK_1231 1
ENSG00000183643 ENST00000917473 183728 194873 3 1
ENSG00000183647 ENST00000184637 800000 819483 2 1
ENSG00000177697 ENST00000184627 100023 120000 11 1
所望の出力:
Chr B C Start End F G E D
chr1 HAVANA gene 100000 112000 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
chr2 HAVANA gene 11869 14409 . + . gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";
問題は、ファイル2の数で5番目の列は部分文字列です最初のファイルの列1の(11の代わりに、それはchr11と言うでしょう)。表2の4番目と5番目の列は、ファイル1(開始と終了)の列4と5に等しくなければなりません。出力をファイル1のように正確にしたいだけです。要素はファイル2のものと同じでなければなりません。
私はawkの構文に慣れていません。私にとっては直感的ではありませんが、この行、私は1つが、このコマンドを拡張することができると思います:
awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0, a[$1]}' file2 file1 > file1_subset2
あなたの質問には、より多くのサンプル入力(一致する行と一致しない行)と、その入力が与えられた場合の期待される出力が含まれます。 –
*問題は、5番目の列のファイル2の番号が最初のファイルの列1の部分文字列であることです(11の代わりにchr11と表示されます)。*これは非常に混乱します。 '11'は' chr1'の部分文字列ではありません。 *「それが言うだろう」*は何を指しているのですか?あなたは* table *と* file *を同じ意味で使用していますか?あなたは列 "*は等しくなければなりません"とはどういう意味ですか? –