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

编者按:

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

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/ .. /^END/../END/’ file #打印START和END之间的部分;

perl -ne ‘print unless /^START/../END/ .. /^END/../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 #文件按行翻转;

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

欢迎订阅我们的微信公众号:基因学苑

上一篇:MongoDB查询


下一篇:KMP算法