美文网首页
脚本 | Shell | 提取每个转录本exon坐标

脚本 | Shell | 提取每个转录本exon坐标

作者: shwzhao | 来源:发表于2021-11-27 17:47 被阅读0次

网上找了一些方法,但都不理想。

  • 以拟南芥gff文件为例,查看$3,没有exon,所以没办法直接提取
$ grep -v "#" Arabidopsis_thaliana.gff | awk '{print $3}' | sort | uniq -c
 197160 CDS
  34621 five_prime_UTR
  27416 gene
  35386 mRNA
  30634 three_prime_UTR
  • 所以,如何将UTRCDS坐标整合成exon,就是关键
    经常使用gffread提取序列,同时我也注意到这个软件对exon也有一些参数,出于直觉...
$ gffread -h
...
 --force-exons: make sure that the lowest level GFF features are printed as
      "exon" features
...
# lowest ...巴拉巴拉,可能就是针对一个转录本多个five_prime_UTR、three_prime_UTR的,没有进行验证
$ gffread Arabidopsis_thaliana.gff --force-exons -o Arabidopsis_thaliana.exon.gff
$ grep -v "#" Arabidopsis_thaliana.exon.gff | awk '{print $3}' | sort | uniq -c
 197160 CDS
 207465 exon
  35386 mRNA
$ less -S Arabidopsis_thaliana.gff
Chr1    phytozomev10    mRNA    3631    5899    .       +       .       ID=AT1G01010.1.TAIR10;geneID=AT1G01010.TAIR10;gene_name=AT1G01010
Chr1    phytozomev10    exon    3631    3913    .       +       .       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    exon    3996    4276    .       +       .       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    exon    4486    4605    .       +       .       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    exon    4706    5095    .       +       .       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    exon    5174    5326    .       +       .       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    exon    5439    5899    .       +       .       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    CDS     3760    3913    .       +       0       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    CDS     3996    4276    .       +       2       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    CDS     4486    4605    .       +       0       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    CDS     4706    5095    .       +       0       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    CDS     5174    5326    .       +       0       Parent=AT1G01010.1.TAIR10
Chr1    phytozomev10    CDS     5439    5630    .       +       0       Parent=AT1G01010.1.TAIR10
...
  • 那获取坐标就不用说了,直接长度统计
$ awk '$3 ~ /exon/{gsub(/.*Parent=/,"",$9);gsub(/;.*/,"",$9);if(a[$9]=="")a[$9]=$5-$4+1 ;else a[$9]+=$5-$4+1}END{for(i in a)print i"\t"a[i]}' Arabidopsis_thaliana.exon.gff | sort -k1 | les
AT1G01010.1.TAIR10      1688
AT1G01020.1.TAIR10      1623
AT1G01020.2.TAIR10      1085
AT1G01030.1.TAIR10      1905
AT1G01040.1.TAIR10      6251
AT1G01040.2.TAIR10      5877
AT1G01050.1.TAIR10      976
...
awk '$3 ~ /exon/{gsub(/.*Parent=/,"",$9);gsub(/;.*/,"",$9);if(a[$9]=="")a[$9]=$5-$4+1 ;else a[$9]+=$5-$4+1}END{for(i in a)print i"\t"a[i]}' Arabidopsis_thaliana.exon.gff  | \
awk 'ARGIND==1{a[$1]=$2}ARGIND==2{print $0"\t"a[$2]}' - geneid_transid.tsv | sort -k 1,1 -k 3,3nr | awk '{if(a[$1]==""){a[$1]=$2;print $1"\t"$2"\t"$3} else next}'
AT1G01010.TAIR10        AT1G01010.1.TAIR10      1688
AT1G01020.TAIR10        AT1G01020.1.TAIR10      1623
AT1G01030.TAIR10        AT1G01030.1.TAIR10      1905
AT1G01040.TAIR10        AT1G01040.1.TAIR10      6251
AT1G01050.TAIR10        AT1G01050.1.TAIR10      976
...

从基因AT1G01040可以观察到正确性

最后的代码,其实也可以用来“土方法”获取最长转录本。

相关文章

网友评论

      本文标题:脚本 | Shell | 提取每个转录本exon坐标

      本文链接:https://www.haomeiwen.com/subject/sahqxrtx.html