Skip to main content

2.5 GTF Format

GTF (Gene Transfer Format) is a widely-used file format for gene annotations. It’s a refinement of GFF version 2 and is particularly popular for RNA-seq analysis.

Overview

GTF files describe:

  • Gene structures
  • Transcript isoforms
  • Exon positions
  • Coding sequences (CDS)
  • Start and stop codons

GTF Format Structure

GTF files are tab-delimited text files with 9 columns, similar to GFF but with specific attribute requirements.

Basic Structure

chr1    HAVANA  gene    11869   14409   .   +   .   gene_id "ENSG00000223972"; gene_name "DDX11L1";
chr1    HAVANA  transcript  11869   14409   .   +   .   gene_id "ENSG00000223972"; transcript_id "ENST00000456328"; gene_name "DDX11L1";
chr1    HAVANA  exon    11869   12227   .   +   .   gene_id "ENSG00000223972"; transcript_id "ENST00000456328"; exon_number "1";
chr1    HAVANA  exon    12613   12721   .   +   .   gene_id "ENSG00000223972"; transcript_id "ENST00000456328"; exon_number "2";
chr1    HAVANA  exon    13221   14409   .   +   .   gene_id "ENSG00000223972"; transcript_id "ENST00000456328"; exon_number "3";

GTF Columns

Column Name Description
1 seqname Chromosome or scaffold name
2 source Source of annotation (Ensembl, HAVANA, etc.)
3 feature Feature type (gene, transcript, exon, CDS, etc.)
4 start Start position (1-based, inclusive)
5 end End position (1-based, inclusive)
6 score Confidence score (usually .)
7 strand + (forward), - (reverse)
8 frame For CDS: 0, 1, or 2 (reading frame)
9 attribute Semicolon-separated key “value” pairs

Standard feature types:

  • gene - Gene
  • transcript - Transcript (mRNA, lncRNA, etc.)
  • exon - Exon
  • CDS - Coding sequence
  • start_codon - Translation start
  • stop_codon - Translation stop
  • UTR - Untranslated region
  • 5UTR - 5’ UTR
  • 3UTR - 3’ UTR

Reading frame

For CDS features - reading frame:

  • 0 - First nucleotide is first position of codon
  • 1 - Second nucleotide is first position of codon
  • 2 - Third nucleotide is first position of codon
  • . - Not applicable (for non-CDS features)

Attributes

Required attributes:

  • gene_id - Unique gene identifier (REQUIRED for all features)
  • transcript_id - Unique transcript identifier (REQUIRED for transcript-level features)

Attribute format:

key "value"; key2 "value2";

Note: Values are quoted, statements end with semicolon

Example: Complete Gene Structure


# Transcript level
chr11   refGene transcript      32233672        32234486        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218";  gene_name "Hba-a1";

# Exons
chr11   refGene exon    32233672        32233801        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "1"; exon_id "NM_008218.1"; gene_name "Hba-a1";
chr11   refGene exon    32233924        32234128        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "2"; exon_id "NM_008218.2"; gene_name "Hba-a1";
chr11   refGene exon    32234263        32234486        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "3"; exon_id "NM_008218.3"; gene_name "Hba-a1";

Example: Protein-Coding Gene (Hba-a1)

chr11   refGene transcript      32233672        32234486        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218";  gene_name "Hba-a1";
chr11   refGene exon    32233672        32233801        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "1"; exon_id "NM_008218.1"; gene_name "Hba-a1";
chr11   refGene 5UTR    32233672        32233706        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "1"; exon_id "NM_008218.1"; gene_name "Hba-a1";
chr11   refGene CDS     32233707        32233801        .       +       0       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "1"; exon_id "NM_008218.1"; gene_name "Hba-a1";
chr11   refGene exon    32233924        32234128        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "2"; exon_id "NM_008218.2"; gene_name "Hba-a1";
chr11   refGene CDS     32233924        32234128        .       +       1       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "2"; exon_id "NM_008218.2"; gene_name "Hba-a1";
chr11   refGene exon    32234263        32234486        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "3"; exon_id "NM_008218.3"; gene_name "Hba-a1";
chr11   refGene CDS     32234263        32234388        .       +       0       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "3"; exon_id "NM_008218.3"; gene_name "Hba-a1";
chr11   refGene 3UTR    32234392        32234486        .       +       .       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "3"; exon_id "NM_008218.3"; gene_name "Hba-a1";
chr11   refGene start_codon     32233707        32233709        .       +       0       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "1"; exon_id "NM_008218.1"; gene_name "Hba-a1";
chr11   refGene stop_codon      32234389        32234391        .       +       0       gene_id "Hba-a1"; transcript_id "NM_008218"; exon_number "3"; exon_id "NM_008218.3"; gene_name "Hba-a1";

Working with GTF Files

View GTF file

less annotation.gtf
head -n 20 annotation.gtf

Count features by type

cut -f3 annotation.gtf | sort | uniq -c

Extract all 5’UTRs

awk '$3 == "5UTR"' annotation.gtf

Extract specific gene

grep 'gene_name "ACTB"' annotation.gtf

Get unique gene list

grep -P '\tgene\t' annotation.gtf | \
    grep -oP 'gene_name "\K[^"]+' | \
    sort -u

Extract transcripts on specific chromosome

awk '$1 == "chr1" && $3 == "transcript"' annotation.gtf

Convert GTF to BED

# Extract exons as BED
awk '$3 == "exon" {print $1"\t"$4-1"\t"$5"\t"$10"\t"$6"\t"$7}' annotation.gtf | \
    tr -d '";'

Gene GTF Sources

Internal to the CCB:

/databank/igenomes/Mus_musculus/UCSC/mm39/Annotation/Genes/refGene.gtf

/databank/igenomes/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf

Additional Resources