我想提取看起来像这样的旧的法斯塔名称:
>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
,依此类推。 它们顺序不对,我该如何对它们进行排序并摆脱物种名称中的>?
答案 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
文件名保留了不必要的变量。
如果您出于其他原因(可能将其开发为更复杂的脚本)而希望将映射保留在内存中,则使用数组而不是哈希来进行条目排序似乎是一种自然的方法;新标签可以从数组索引中轻易衍生出来。