将旧的fasta标头和新的文件写入文件

时间:2018-10-24 19:04:31

标签: perl fasta

我想提取看起来像这样的旧的法斯塔名称:

>Bartonella bibbi
AUUCCGGUUGAUCCUGCCGGAGGCCACUGCUAUCGGGGUCCG

新标题应如下所示:

>Seq1
AUUCCGGUUGAUCCUGCCGGAGGCCACUGCUAUCGGGGUCCG

,依此类推... Bartonella Bibbi应该与新名称Seq1一起保存在新文件中,依此类推。因此,我通过使用>查找行开始了一些工作,然后拆分以获取一个数组以获取旧名称。我不知道如何继续,因为我想在这里做两件事,首先在其中放置新名称,还要将旧名称和新名称一起提取到一个文件中,然后还要获取包含我的序列和我的输出文件新名称。请,您的任何意见都会有所帮助!

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";

while (my $line = <$IN>) {
 if ($line =~ /^>/) {

my @header = split (/\>/, $line);

    my $oldfasta = "$header[1]";

}
}

因此,在进行一些编辑之后,这是当前的脚本:

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";

my $seqid = 1;
my %id;

while (my $line = <$IN>) {
 if ($line =~ /^>/) {

     $id{"Seq$seqid "} = $line;
     print ">Seq$seqid\n";
     $seqid++
 } else {

     print $line;
 }


}

     my $outfile = 'output';
     open my $OUT, '>', $outfile or die "Could not open $outfile: $!, $?";  # overwrites the file $outfile;
     print $OUT %id;

这给了我一个看起来像这样的文件:

   Seq29  >Sulfophobococcus_zilligii

   Seq20 >Pyrococcus_shinkaii

,依此类推。 它们顺序不对,我该如何对它们进行排序并摆脱物种名称中的>?

2 个答案:

答案 0 :(得分:0)

您根本不打印任何内容。添加print语句后,它应该可以工作。

此外,您还不清楚您使用的是split。只需增加序列的计数器即可:

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";

my $seqid = 1;

while (my $line = <$IN>) {
    if ($line =~ /^>/) {
        print ">Seq$seqid\n";
        $seqid++;
    } else {
        print $line;
    }
}

答案 1 :(得分:0)

在创建新条目时只需编写它们。

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";
my $outfile = 'output';
open my $OUT, '>', $outfile or die "Could not open $outfile: $!, $?";  # overwrites the file $outfile;

my $seqid = 1;

while (my $line = <$IN>) {
     if ($line =~ /^>(.+)/) {
        print $OUT "Seq$seqid\t$1\n"
        print ">Seq$seqid\n";
        $seqid++
     } else {
        print $line;
     }
}

我试图解决缩进问题,但为$OUT文件名保留了不必要的变量。

如果您出于其他原因(可能将其开发为更复杂的脚本)而希望将映射保留在内存中,则使用数组而不是哈希来进行条目排序似乎是一种自然的方法;新标签可以从数组索引中轻易衍生出来。