查看原文
其他

生物信息之独孤九剑——单行perl

2016-09-12 风清扬 基因学苑


编者按:

  在金庸武学体系的众多武功之中,独孤九剑并不是最强劲的武功,它与其他武林绝学有很大的不同,可以说是鹤立鸡群。比如乔峰的降龙十八掌,段誉的六脉神剑,张无忌的九阳神功,石破天的罗汉伏魔神功,这些神功都需要强大的内力支撑,而独孤九剑则不同,不需要内力,这点其实可以从华山派气宗与剑宗的分歧就可以看出来。独孤九剑传人风清扬属于剑宗,更注重招式,而不是像剑宗注重练气。独孤九剑分为总诀式,破剑式,破刀式,破枪式,破鞭式,破索式,破箭式,破掌式,破气式,遇到不同的场景使用关不同的招式,因此,独孤九剑更加注重问题的解决,本质上就是就是通过工具来解决问题。只要学会这九剑,就可以处理很多的问题。学习生物信息也是同样的道理,当然练好内功,掌握很好的基础是非常必要的,但是也可以学习一些小工具,解决一些实际问题。那么从这次内容开始,我们就来给大家介绍生物信息之独孤九剑。

https://v.qq.com/txp/iframe/player.html?vid=s13098wxl6l&width=500&height=375&auto=0
(查看高清版视频,请点击下面的阅读原文链接)

perl有一个非常大的好处就是支持单行模式。类似于awk和sed的模式。很多时候我们一些perl程序是随手就丢掉了,也就是写完之后就丢掉。可以把perl程序全部放在命令行上。这样就无需再写到一个文件中保存下来而直接在命令行运行就可以。对于大型的,较长久的工作,可以把perl脚本当做一个独立的文件使用。perl是非常优秀的脚本语言。熟练掌握当行perl的技巧,会极大的提高效率。许多awk和sed、grep和sort可以完成的功能,单行的perl的都可以完成,而且有时候比单独使用这些命令更加方便。


案例一:命令行模式perl;

perl -e "print ”hello,world\n";


案例二:while循环;

-n是自动循环,相当于 while(<>) { 脚本; };

perl -ne '{chomp;print "$_\n";}' test.txt     #使用-ne来都读取这个文件,并将其一行行打印出来。这个相当于cat的功能了。


案例三:替换模式,相当于sed功能;

perl -p -e ‘s/scaffold_//'  test.txt   #将其中的ID行里面的scaffold下划线都替换掉;

perl -p -e  -i‘s/scaffold_//'  test.txt   #直接在源文件修改,相当于sed -i;

perl -pie ’s/\r\n/\n/g’ test.txt  #将换行符\r\n替换成\n,相当于dos2unix命令的功能。


案例四:打印文件的任意行或者任意范围的行,相当于awk功能;

perl -lane ‘print “@F[0..4] $F[6]“‘ file   #取出文件的一部分,显示字段0-4和字段6,字段的分隔符是空格;

perl -F: -lane ‘print “@F[0..4]\n”‘ /etc/passwd  #修改分隔符为冒号;


案例五:利用正则表达式,输出固定范围行;

perl -ne ‘print if /^START$/ .. /^END$/’ file   #打印START和END之间的部分;

perl -ne ‘print unless /^START$/ .. /^END$/’ file  #不打印START和END之间的部分;


案例六:显示开头50行,相当于head;

perl -pe ‘exit if $. > 50′ file   #输出文件前50行,相当于head的功能;

perl -ne ‘print if 15 .. 17′ file   #显示15行到17行,相当于head,管道与tail;

如果要丢弃模式内的,将if切换成unless即可。


案例七:提取固定字符;

perl -lne ‘print substr($_, 0, 80) = “”‘ file  #去除每行前80个字符;


案例八:搜索功能,相当于grep功能;

perl -ne ‘print if /comment/’ duptext  #查找固定模式的字符串:

perl -ne ‘print unless /comment/’ duptext   #查找不含comment字符串的行,相当于grep -v;


案例九:排序;

perl -e ‘print sort <>’ #file  #文件按行排序;

perl -00 -e ‘print sort <>’ #file  #文件按段落排序;

perl -0777 -e ‘print sort <>’ file1 file2  #多个文件按文件内容排序,并返回合并后的文件:


案例十:文件按行反转

perl -e ‘print reverse <>’ file1  #文件按行翻转;


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存