遺伝子アノテーションファイル(GTFファイル)から特定の遺伝子を抽出

GTFファイルのうち特定の(調べたい)遺伝子だけを使いたいとき、
grepコマンドを用いて、その遺伝子を含む行を抽出する方法。
orebibou.com

まず、目的の遺伝子のリストを用意する。

$ cat gene_list.txt
EXOC1
NOC2L
BCKDK
NPEPPS
SNX5
DNAJC30
CCR2
AP2A1
LIPA
PNKP

次にGTFファイルを用意する。
FANTOM - CATアノテーションファイルを利用する。

grep -f <gene list file> <GTF file>コマンドを用いて、上記の gene_list.txt の遺伝子を含む行を抽出するのだが、 そのまま実行すると

$ gzcat FANTOM_CAT.lv4_stringent.gtf.gz | grep -f gene_list.txt | wc -l
      75

となり、入力した遺伝子数(10個)よりも行数が多いことがわかる。
そこで、中身を確認したところ、例えば2行目、

chr19    FANTOM  transcript  50364462    50365491    .   -   .   gene_id "ENSG00000039650.5"; transcript_id "ENST00000599454.1"; transcript_type "retained_intron"; transcript_name "PNKP-014"; coding_status "coding"; cumulative_support "GENCODE"; TIEScore "62.25434";

「 transcript_name "PNKP-014"; 」 となっており、部分一致のためこのようなものが多数取れてきていたためであった。

そこで 新たに、「"gene name"」のようにクオーテーションで囲ったものをクエリとして用いる。

$ cat gene_list_quote.txt
"EXOC1"
"NOC2L"
"BCKDK"
"NPEPPS"
"SNX5"
"DNAJC30"
"CCR2"
"AP2A1"
"LIPA"
"PNKP"

$ gzcat FANTOM_CAT.lv4_stringent.gtf.gz | grep -f .gene_list_quote.txt | wc -l
      10

無事目的の行が抽出された。