Perl处理Fasta序列的又一实例

今天再来分享一小段Perl脚本,其实是比较简单的。主要是用来处理Fasta格式的序列。

网友niche Says:

你好,你有没有分割fasta文件的perl脚本,我需要把一个fasta文件按两条序列一组分成若干个fasta文件,谢谢!

如果不懂fasta文件,可以再看一下解释
或是查看: Fasta格式的详细说明

>cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
UGGAAUGUAAAGAAGUAUGUA
>cel-miR-2 MIMAT0000004 Caenorhabditis elegans miR-2
UAUCACAGCCAGCUUUGAUGUGCUAUCACAGCCAGCUUUG
UAUCACAGCCAGCUUUGAUGUGC
……

其中标识符就是大于号’>’。按两个为一组分成若干个文件。大意上是这样。

分割fasta文件

#!/usr/bin/perl

#fasta2.pl
#Usage:perl fasta2.pl in_fasta out_file

open(IN,"<$ARGV[0]");
$i = 0;
$j = 1;
while(<IN>){
    if(/^>/){
        $i++;
    }
    if($i == 3){
        $j++;
        $i = 1;
    }
    open(OUT,">>$ARGV[1]_$j");
    print OUT $_;
}

注: in_fasta是指要处理的fasta文件。

           out_file是指输出的文件。(如命名为out, 则生成的文件名为out_1, out_2, out_3等)

主要是利用循环嘛,第一步是按大于号’>’来统计个数。再用$j来循环输出文件名。

25 回复
  1. niche says:

    LC,非常感谢,编的很简洁,我完全看懂了。用perl来处理fasta文档真的很方便

  2. evlos says:

    嘎嘎,老兄,那个,fasta是啥?

    柳城 回复:

    一种格式啊, 就是数据严格按照这种格式保存在文件里.以>开始. 其实上面有解释的. :)

    evlos 回复:

    额,不好意思,没说清楚 ~
    其实小邪想问的是这个格式是拿来做什么的?
    看了上面,难道这个格式只是DNA之类专用的?

    柳城 回复:

    的确是.. 自从DNA测序后, 规定了这种格式(其中一种,当然还有其它类型的格式)来存放的序列.. 是跟我打交道最多的一种格式啊. :)

  3. xinsinian says:

    就是我把你的程序拷贝到txt后,改名为fasta2.pl,然后用cmd里运行perl fasta2.pl,我安装activeperl了。我的序列文件名字叫in_fasta,需要后缀名吗。基础太差了。呵呵,谢谢

    柳城 回复:

    Usage:perl fasta2.pl in_fasta out_file
    不用后缀。用cmd要注意路径。如c:/fasta2.pl
    不用后缀,里面格式是fasta就行。

    xinsinian 回复:

    多谢啊,我知道我为什么不能运行了,我cmd输入的命令只是“perl fasta2.pl ”
    我输入“perl fasta2.pl in_fasta out_file”,就运行的很好了,真的很神奇啊。

    Usage是输入命令的意思吗?刚刚接触perl,十分感谢。你这个博客真是对搞生物信息学的雪中送炭啊!

    柳城 回复:

    usage是用法的意思.. 呵呵.. 输入命令也差不多了

  4. 陆景标 says:

    我把你的程序拷贝下来放在一个记事本中,然后保存为fasta2.pl格式,放在D盘其中一个文件中,我把高粱全基因序列sbi1.fasta改为in_fasta.fasta文件也放在这个文件中, 在cmd中找到这个文件的目录然后输入
    perl fasta2.pl in_fasta out_file,怎么没有反应啊,不知道为什么,请您指教,第一次接触perl,不懂的太多,但是对我们实验帮助太大,不得不掌握啊。

    柳城 回复:

    要有完整的目录.那只是例子而已了.如c:/in_fasta.fasta

    ~ 有问题请到yunbio.com

评论已关闭。