Perl编程基础
Posted 生信草堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl编程基础相关的知识,希望对你有一定的参考价值。
生信草堂
号外,号外,号外
你想和生信分析大神做好朋友么?
你想认识更多爱好生信分析的小伙伴么?
你想让自己的生信分析走上快车道么?
添加我们的微信bioinformatics88为好友
标注“加入生信草堂交流群”
在群里请大家注明自己本名,单位,研究领域
便于小编管理
生信大讲堂微信公众平台,作为浙江大学农业与生物技术学院作物所研究生第七党支部“生信大讲堂”生物信息系列讲座的重要线上平台,结合学科特色,坚持以“四讲四有”中“讲奉献有作为”作为活动核心价值观,为广大科研工作者提供了学习生物信息学相关学科知识的资源及平台。
马云曾说过“懒人改变世界”。我们的主人公Larry就是这样的一个人。Larry在进行一个项目时发现现存的这些语言无法实现其想要的功能,他需要重新写一个工具来实现这个功能,这个是Larry所不能忍受的,而最终的结果就是Perl的诞生。
因为是出于懒的缘故Larry才创造了Perl,这就导致了Perl中有很多比较奇特的东西,这些东西使用起来很方便,但是对于代码的阅读却是灾难,Perl也获得了“write-only”的美誉。
鉴于活动是讲座的性质,所以在此就没有涉及到Perl具体语法等的介绍,这部分内容可以根据前面推荐的教材来进行自学。在此我想讲的是在生物信息学应用中体现出的Perl的两个优点:哈希、正则表达式。
01
哈希是Perl的优势之一,相对于数组,哈希可以同时利用键、值来存储信息,在一些场景下有比较好的效果,比如碱基统计、数据匹配等。
以碱基统计为例,下面图1中Perl脚本即可以实现简单的碱基统计,图2是其运行的结果。相对于使用数组统计碱基需要进行判断来说简便了不少。对这个脚本进行一些改进就可以进行应用。
图1 哈希实现碱基统计
图2 哈希实现碱基统计结果
2
第二个优势体现在数据匹配时,比如图3是一个gff格式的文件的一部分,需要根据图4的mRNA信息获取mRNA对应的gene信息。
图3 gff格式数据文件内容
图4 需要获取的gene信息对应的mRNA信息
因为gff文件中只有一部分数据是我们筛选匹配时需要的,这样的话我们就可以在匹配之前进行一定的数据预处理。
根据上面的内容,实现上面的要求分两步进行:数据预处理、哈希存储&获取。
数据预处理部分,所需要获取的内容在第9列数据中都有体现,所以只需要保留数据行的第9列并进行一些处理即可,使用Linux的管道来实现。命令如下:
grep -v "^#" Mus_musculus.gff3|grep "ID=transcript" |cut -f9 |cut -d';' -f1,2 |perl -npe"s/ID=transcript://" |perl -npe "s/;Parent=gene:/ /">result_mRNA
经过截取后的内容保存到result_mRNA中,结果如图5:
图5 预处理结果显示(部分)
然后通过哈希存储对应的mRNA和gene的信息,直接读取图4文件中的数据,找到对应的gene信息并显示。具体的代码如图6:
图6获取mRNA对应gene信息
直接运行该脚本,结果如图7:
图7获取结果
脚本虽然比较简单,但是在处理数据量很大的内容时还是有很大优势的,这也是Perl的优势体现。
3
Perl的另一个优势就是正则表达式,正则表达式在文本文件处理中有很大的作用,这里就不一一演示,待各位学习了Perl以后自行发现。
不论是Perl还是前面讲到的Linux shell编程,都是需要一步一步进行实践的,单纯的看、记忆意义不大,更多的练习才是学习以及以后应用的关键所在。另一方面就是要善用网络资源,我也是一个入门者,我所讲的内容是基于我自己对生物信息学的理解,也可能存在这样那样的错误,更好的方式就是各位充分利用互联网,自我学习自我完善。
学术手拉手
长按关注生信大讲堂
以上是关于Perl编程基础的主要内容,如果未能解决你的问题,请参考以下文章