第一个任务:任意物种拿到转录本ID 与基因ID的对应关系列表
从ensemble数据库中下载了Human的基因组注释文件gtf文件
1.下载Human的GTF文件
wget -c ftp://ftp.ensembl.org/pub/release-97/gtf/homo_sapiens/Homo_sapiens.GRCh38.97.gtf.gz
2.获取转录本ID和基因ID的对应关系列表
zcat gencode.v29.annotation.gtf.gz|awk '$3=="transcript" {print $o}'|awk -F '\t' '{print $9}'|cut -d';' -f 1,2 |sed -e 's/gene_id//g' -e's/transcript_id//g' -e 's/"//g' -e s'/;/\t/g' -e s'/^\s//g' > hg38_geneid_tranid_ly.txt
less hg38_geneid_tranid_ly.txt
zcat gencode.v29.annotation.gtf.gz |awk '$3 =="transcript" {print $0}'|cut -f 9|cut -d';' -f 1,2 | less -S
perl -p -i -e 's/ge.*"(E.*)".*"(E.*)"/$1\t$2/g' 1.tmp
less 1.tmp
第一种使用了纯shell编程,重复使用了sed命令,
第二种使用了shell+perl的方法。
可以发现学习编程的好处就是在于可以使用不同的方式去完成相同的目的。
看完曾老师的代码发现更加简洁,所以我准备课后认真学习一下perl命令行,争取更加简便的写代码!
今天在批量获取转录本ID和基因ID的过程种,遇到了一点儿错误
发现第二列是应该是gtf文件种的版本信息吧。
因此我就查看了这个物种的gtf注释信息的第9列到底是什么情况。
感觉还是很有意思的,在这次实操种,我发现了物种的gtf注释文件的格式并不是一成不变的。在gtf框架是一致的情况下,还有非常细小的差别。(比如可以增加了版本信息等)
这样代码就需要做出一点儿改变:cut -f 1,3 就可以解决了
zcat Bison_bison_bison.Bison_UMD1.0.97.gtf.gz|awk '$3=="transcript" {print $o}'|awk -F '\t' '{print $9}'|cut -d';' -f 1,3 |sed -e 's/gene_id//g' -e's/transcript_id//g' -e 's/"//g' -e s'/;/\t/g' -e s'/^\s//g' > Bison_bison_bison.Bison_UMD1.0.97.gtf.gz_geneid_tranid_ly.txt
因此给我们的提示就是,在做转录本ID和基因ID的对应关系的时候,要认真查看物种的gtf文件的格式,那一点儿细微的差别,可能导致批量操作后的结果,并不是你想要的!