Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

2つのファイルの共通行を抽出する

前回に続き、今回も小ネタです。

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

参考:

2つのファイルの共通行を抽出する方法 - Qiita

特定の列だけを対象にして抽出したい時

遺伝子名以外の情報も同じ行に含まれていて、遺伝子名だけで完全一致をカウントしたい時、上記の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など使えばもっと簡単にできます。

コマンドライン上でgrepのように一発でできる簡単な方法がもしありましたら教えてください。