Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perl从FASTA文件添加序列_Perl_Sequence_Fasta - Fatal编程技术网

使用Perl从FASTA文件添加序列

使用Perl从FASTA文件添加序列,perl,sequence,fasta,Perl,Sequence,Fasta,我仍在学习Perl,我有一个程序,它能够获取FASTA文件序列头并只打印方括号内的物种名称。我想添加到这个代码中,让它也打印出与物种相关的整个序列 这是我的密码: #/usr/bin/perl 使用警告; my$file='seqs.fasta'; my$tmp='newseqs.fasta'; 打开(OUT,“>”,$tmp)或死亡“无法打开$tmp:$!”; 打开(在,中),这是因为它的作用: if ( $_ =~ /\[([^]]+)\]/ ) { print OUT "$

我仍在学习Perl,我有一个程序,它能够获取FASTA文件序列头并只打印方括号内的物种名称。我想添加到这个代码中,让它也打印出与物种相关的整个序列

这是我的密码:

#/usr/bin/perl
使用警告;
my$file='seqs.fasta';
my$tmp='newseqs.fasta';
打开(OUT,“>”,$tmp)或死亡“无法打开$tmp:$!”;

打开(在,中),这是因为它的作用:

if ( $_ =~ /\[([^]]+)\]/ ) {
        print OUT "$1\n";
}
就是在
[]
中查找并捕获任何文本。但是如果该模式不匹配,您就不会对该行执行任何其他操作,比如打印它

添加:

else {
    print OUT $_;
}
这意味着,如果一行不包含
[]
,则默认情况下将打印该行

我还建议:

  • 启用
    使用严格;

  • 词法文件句柄是一种很好的实践:
    open(my$input),关于您的程序的一些一般要点

    • 您必须始终
      在编写的每个Perl程序的顶部使用strict
      以及
      使用warnings'all'
      。这将揭示许多简单的错误,否则很容易被忽略

    • 选择
      open
      的三参数形式做得很好,但也应该使用词法文件句柄

    open(OUT,'>',$tmp)或die“无法打开$tmp:$!”;
    应写为
    
    打开我的$out\u fh,'>',$tmp或die“无法打开$tmp:$!”;
    
    • 最好在命令行上提供输入和输出文件名,这样您就不必编辑程序来针对不同的文件运行它
    我会像这样解决你的问题。它会检查每一行是否都是一个包含方括号中的字符串的标题。第一个测试是该行以一个闭角括号开始
    ,第二个测试与你在自己的程序中编写的捕获括号中的字符串(物种名称)相同

    如果这些检查通过,则物种名称将以闭合角括号和换行符打印,否则按原样打印

    这个程序应该像这样运行

    $fasta_species.pl seqs.fasta>newseqs.fasta
    
    美元只是Linux提示字符,它假设您已将程序放入文件名
    fasta_species.pl
    中。您可以省略
    >newseqs.fasta
    将输出直接显示在屏幕上,这样您就可以看到正在生成的内容,而无需创建输出文件并对其进行编辑

    使用严格;
    使用“全部”警告;
    而(){
    如果(/^>/和/\[([^\[\]+)\]/x){
    打印“>$1\n”;
    }
    否则{
    印刷品;
    }
    }
    
    输出 拟南芥 MKIRNPSPSFSHGGSGYSVFRANLTFKVKVMRDQSNNQFMiqmenmirivreeIQRSLQPFLSSCVSMERSSETP SSRSRLKLCFINSPSSIPFTGSKIEAEDGSPLVIELVDATTNTLVSTGPFSSSRVELVPLNADDFTESWTVEGFNRNILT QREGKRPLLTLGDLTVMLKNGVGVTGDIAFSDNSSWTRSRKFRLGAKLTGDGAVEARSEAFGCRDQRGESYKHHPPS DEVWRLEKIAKADGVSATRLAERKILTVKDFRRLYIGGVSKKTWNTIVSHAMDCVLDETECYNANTPGVTLLFNSV YELIRVSFGNDIQNLDQILDQLKAYQNLINRITAVNDRTFVGHPQSLQCPQDPGFVVTSCGSQHIDFQGSLDPSS SMALCHKASSTVHPDVLMSFDNSSTARTFHIDKKFLPTFGNSFKVSELDQVHGKSQTVvTvTvTvKgCIENEDENAFSYHHD DMTSSWSPGTHQAVETMFLTVSETEEAGMFDVHFANVNLGSPRARWCKVKAAFKVRAAFKEVRRTARNPREGL
    为什么要自己解析?谢谢,这很有意义。确保默认打印不包括标题中的内容,而只包括标题后的实际序列的最佳方法是什么?呃。取决于哪个位是“标题”你提到了。但是你可以这样做,例如,如果m/>/
跳过包含
的行,哦,哇,谢谢你的建议!我可以看到这将在哪里起作用。要正确格式化fasta文件,在物种名称之前包含
并在下一行打印,我只需在
print OUT$\uCode>语句中添加\n即可是吗?是的。或者只是不把这行放在第一位,它就会保持它的换行。