前回に続き、今回も小ネタです。
2つの遺伝子リストファイルがあって、2ファイル間で共通する遺伝子名がいくつあるか調べたいとします。
$ ls genelist1.txt genelist2.txt $ cat genelist1.txt RNA5SP516 AC092299.1 EML3 ZNF492 AC093063.1 DDX17 SRIP1 MIR3167 IGHD3-16 NRDC ASPHD2 BNIP3L KRT18P60 $ cat genelist2.txt MED21 ETS2 MTCO3P39 AC008739.5 RNU1-101P AC073548.1 MGST2 ASPHD2 BNIP3L KRT18P60 RNA5SP516 AC092299.1 EML3
grepコマンドを使う方法
こういうファイルの場合はgrepを使うと一発でカウントできます。
ここでは2ファイルで完全一致する行を抽出しています。
(-i
オプションを追加すると大文字・小文字を区別しなくなります。)
$ grep -x -f genelist1.txt genelist2.txt ASPHD2 BNIP3L KRT18P60 RNA5SP516 AC092299.1 EML3
遺伝子数をカウントしたい時はwc
をつけましょう。
$ grep -x -f genelist1.txt genelist2.txt | wc -l 6
参考:
特定の列だけを対象にして抽出したい時
遺伝子名以外の情報も同じ行に含まれていて、遺伝子名だけで完全一致をカウントしたい時、上記のgrepは使えません。
$ cat genelist1.txt RNA5SP516 ENSG00000201000 chrX + 142411052 142411171 142411052 142411171 1 142411052, 142411171, rRNA_pseudogene rRNA_p RNA5SP516-201 ENST00000364130 AC092299.1 ENSG00000282416 chr19 - 197309 198066 197309 198066 1 197309, 198066, processed_pseudogene processed_pseudogene AC092299.1-201 ENST00000632679 EML3 ENSG00000149499 chr11 - 62602217 62612775 62602474 62612457 22 62602217,62602758,62603148,62603728,62603943,62604112,62605112,62605641,62605854,62606062,62606957,62607665,62608200,62608541,62608735,62608961,62609353,62609628,62610878,62611086,62611424,62612435, 62602678,62602889,62603247,62603816,62604041,62604201,62605180,62605773,62605980,62606214,62607099,62607821,62608296,62608652,62608805,62609132,62609477,62609696,62610992,62611344,62611596,62612775, p protein_coding EML3-202 ENST00000394773 ZNF492 ENSG00000229676 chr19 + 22634323 22667671 22653399 22665265 4 22634323,22653306,22653919,22663799, 22634474,22653433,2265 protein_coding protein_coding ZNF492-201 ENST00000456783 AC093063.1 ENSG00000268088 chr19 + 39693924 39696258 39693924 39696258 3 39693924,39694463,39696142, 39693960,39694674,3969 transcribed_unprocessed_pseudogene transcribed_unprocessed_pseudogene AC093063.1-201 ENST00000599317 DDX17 ENSG00000100201 chr22 - 38483439 38506337 38485934 38506237 13 38483439,38487872,38492055,38493709,38494020,38494629,38494885 38486440,38488115,38492115,38493771,38494131,38494802,38495046,38495937,38498150,38498573,38499499,38501280,38506337, p protein_coding DDX17-202 ENST00000396821 SRIP1 ENSG00000248660 chr4 + 58103146 58103434 58103146 58103434 1 58103146, 58103434, processed_pseudogene proces SRIP1-201 ENST00000489235 MIR3167 ENSG00000266215 chr11 - 126988457 126988542 126988457 126988542 1 126988457, 126988542, miRNA miRNA MIR3167-201 ENST00000579623 IGHD3-16 ENSG00000211917 chr14 - 105895633 105895670 105895633 105895670 1 105895633, 105895670, IG_D_gene IG_D_g IGHD3-16-201 ENST00000390577 NRDC ENSG00000078618 chr1 - 51789190 51878805 51789235 51878615 33 51789190,51789567,51790532,51790899,51791577,51792045,51792376,51794471,51794822,51798248,51800555,51803813,51805509,51806793,51809314,51810280,51811993,51814034,51814550,51814692,51816311,51818065,51819799,51821497,51823663,51825286,51 51789433,51789657,51790649,51790990,51791661,51792098,51792424,51794610,51794854,51798411,51800683,51803964,51805561,51806913,51809401,51810404,51812098,51814089,51814609,51814813,51816389,51818135,51819873,51821555,51823786,51825382,51827869,51834170,51836212,51836438,51837620,51840 protein_coding protein_coding NRDC-202 ENST00000354831 ASPHD2 ENSG00000128203 chr22 + 26429259 26445015 26433615 26443206 4 26429259,26433391,26442458,26443096, 26429486,26434501,2644 protein_coding protein_coding ASPHD2-201 ENST00000215906 BNIP3L ENSG00000104765 chr8 + 26383196 26505636 26383196 26505319 6 26383196,26391242,26395229,26407999,26408226,26505306, 263832 protein_coding protein_coding BNIP3L-207 ENST00000523949 KRT18P60 ENSG00000215208 chr12 - 65418730 65420027 65418730 65420027 1 65418730, 65420027, processed_pseudogene p KRT18P60-201 ENST00000312876 $ cat genelist2.txt MED21 ENSG00000152944 chr12 + 27022557 27030673 27022579 27028461 4 27022557,27026419,27027346,27028284, 27022621,27026534,2702 protein_coding protein_coding MED21-201 ENST00000282892 ETS2 ENSG00000157557 chr21 + 38805182 38824955 38810034 38822889 11 38805182,38805970,38810034,38813002,38814272,38814780,38817007 38805616,38806120,38810106,38813114,38814392,38814981,38817091,38818646,38819766,38821704,38824955, protein_coding protein_coding ETS2-201 ENST00000360214 MTCO3P39 ENSG00000268736 chr4 + 49246020 49246538 49246020 49246538 1 49246020, 49246538, processed_pseudogene p MTCO3P39-201 ENST00000514812 AC008739.5 ENSG00000279404 chr19 - 20926776 20928714 20926776 20928714 1 20926776, 20928714, TEC TEC AC0087 ENST00000623035 RNU1-101P ENSG00000212473 chr8 - 70077905 70078032 70077905 70078032 1 70077905, 70078032, snRNA snRNA RNU1-1 ENST00000391171 AC073548.1 ENSG00000279861 chr19 - 47487637 47489519 47487637 47489519 1 47487637, 47489519, TEC TEC AC0735 ENST00000624088 MGST2 ENSG00000085871 chr4 + 139665767 139740745 139666019 139704148 6 139665767,139678542,139695196,139703454,139704015,139740211, 1 protein_coding protein_coding MGST2-207 ENST00000616265 ASPHD2 ENSG00000128203 chr22 + 26429259 26445015 26433615 26443206 4 26429259,26433391,26442458,26443096, 26429486,26434501,2644 protein_coding protein_coding ASPHD2-201 ENST00000215906 BNIP3L ENSG00000104765 chr8 + 26383196 26505636 26383196 26505319 6 26383196,26391242,26395229,26407999,26408226,26505306, 263832 protein_coding protein_coding BNIP3L-207 ENST00000523949 KRT18P60 ENSG00000215208 chr12 - 65418730 65420027 65418730 65420027 1 65418730, 65420027, processed_pseudogene p KRT18P60-201 ENST00000312876 RNA5SP516 ENSG00000201000 chrX + 142411052 142411171 142411052 142411171 1 142411052, 142411171, rRNA_pseudogene rRNA_p RNA5SP516-201 ENST00000364130 AC092299.1 ENSG00000282416 chr19 - 197309 198066 197309 198066 1 197309, 198066, processed_pseudogene processed_pseudogene AC092299.1-201 ENST00000632679 EML3 ENSG00000149499 chr11 - 62602217 62612775 62602474 62612457 22 62602217,62602758,62603148,62603728,62603943,62604112,62605112,62605641,62605854,62606062,62606957,62607665,62608200,62608541,62608735,62608961,62609353,62609628,62610878,62611086,62611424,62612435, 62602678,62602889,62603247,62603816,62604041,62604201,62605180,62605773,62605980,62606214,62607099,62607821,62608296,62608652,62608805,62609132,62609477,62609696,62610992,62611344,62611596,62612775,
cut
コマンドで特定列だけ抽出してもよいのですが、中間ファイルができてしまいますし、他の列の情報を以後の解析で用いたい場合は使えません。
ここでは私のscriptに含まれている combine_lines_from2files.pl
を使ってみましょう。
スクリプトをダウンロードする時は以下のコマンドを実行してください(要gitコマンド)。
$ git clone https://github.com/rnakato/script_rnakato.git
スクリプトを実行します。-1
, -2
でファイル名を指定し、-a
, -b
で対象にする列数(ここでは0列目)を指定します。遺伝子名が冒頭にないファイルでも大丈夫です。
$ combine_lines_from2files.pl -1 genelist1.txt -2 genelist2.txt -a 0 -b 0 ASPHD2 ENSG00000128203 chr22 + 26429259 26445015 26433615 26443206 4 26429259,26433391,26442458,26443096, 26429486,26434501,2644 protein_coding protein_coding ASPHD2-201 ENST00000215906 ASPHD2 ENSG00000128203 chr22 + 26429259 26445015 26433615 264432 4 26429259,26433391,26442458,26443096, 26429486,26434501,26442572,26445015, protein_coding protein_coding ASPHD2-201 ENST00000215906 BNIP3L ENSG00000104765 chr8 + 26383196 26505636 26383196 26505319 6 26383196,26391242,26395229,26407999,26408226,26505306, 263832 protein_coding protein_coding BNIP3L-207 ENST00000523949 BNIP3L ENSG00000104765 chr8 + 26383196 2 26383196 26505319 6 26383196,26391242,26395229,26407999,26408226,26505306, 26383230,26391426,26395302,26408103,26408376,26505636, protein_coding protein_coding BNIP3L-207 ENST00000523949 KRT18P60 ENSG00000215208 chr12 - 65418730 65420027 65418730 65420027 1 65418730, 65420027, processed_pseudogene p KRT18P60-201 ENST00000312876 KRT18P60 ENSG00000215208 chr12 - 65418730 65420027 65418730 65420027 1 6 65420027, processed_pseudogene processed_pseudogene KRT18P60-201 ENST00000312876 RNA5SP516 ENSG00000201000 chrX + 142411052 142411171 142411052 142411171 1 142411052, 142411171, rRNA_pseudogene rRNA_p RNA5SP516-201 ENST00000364130 RNA5SP516 ENSG00000201000 chrX + 142411052 142411171 142411052 142411171 1 142411 142411171, rRNA_pseudogene rRNA_pseudogene RNA5SP516-201 ENST00000364130 AC092299.1 ENSG00000282416 chr19 - 197309 198066 197309 198066 1 197309, 198066, processed_pseudogene processed_pseudogene AC092299.1-201 ENST00 AC092299.1 ENSG00000282416 chr19 - 197309 198066 197309 198066 1 197309, 198066, processed_pseudogene processed_pseudogene AC0922 ENST00000632679 EML3 ENSG00000149499 chr11 - 62602217 62612775 62602474 62612457 22 62602217,62602758,62603148,62603728,62603943,62604112,62605112,62605641,62605854,62606062,62606957,62607665,62608200,62608541,62608735,62608961,62609353,62609628,62610878,62611086,62611424,62612435, 62602678,62602889,62603247,62603816,62604041,62604201,62605180,62605773,62605980,62606214,62607099,62607821,62608296,62608652,62608805,62609132,62609477,62609696,62610992,62611344,62611596,62612775, p protein_coding EML3-202 ENST00000394773 EML3 ENSG00000149499 chr11 - 62602217 62612775 62602474 62612457 22 62602217,62602758,62603148,62603728,62603943,62604112,62605112,62605641,62605854,62606062,62606957,62607665,62608200,62608541,62608735,62608961,62609353,62609628,62610878,6261 62602678,62602889,62603247,62603816,62604041,62604201,62605180,62605773,62605980,62606214,62607099,62607821,62608296,62608652,62608805,62609132,62609477,62609696,62610992,62611344,62611596,62612775, protein_coding protein_coding EML3-202 ENST00000394773
出力されるファイルは指定された2つのファイルをマージしたものになります。 中で何をやっているか知りたい人はスクリプトを開いてみてください(適当)。
例によって、行数だけカウントしたい場合はwc
をつけます。
$ combine_lines_from2files.pl -1 genelist1.txt -2 genelist2.txt -a 0 -b 0 | wc -l 6
余談
このスクリプトは.plとついている通りPerlスクリプトです。昔に書いたスクリプトで、特に修正する必要もなかったのでそのまま使っていますが、Pythonのpandasなど使えばもっと簡単にできます。