想要将随机字符串添加到 fasta 文件中的标识符行
Want to add random string to identifier line in fasta file
我想将随机字符串添加到 fasta 文件中的现有标识符行。
所以我得到:
MMETSP0259|AmphidiniumcarteCMP1314aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
然后下一行的顺序正常。我认为格式输出有问题。这是我得到的:
MMETSP0259|AmphidiniumCMP1314aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
CTTCATCGCACATGGATAACTGTGTACCTGACTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
TCTGGGAAAGGTTGCTATCATGAGTCATAGAATaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
它被添加到每一行。 (我改变了长度以适合这里。)我只想添加到标识符行。
这是我目前所拥有的:
use strict;
use warnings;
my $currentId = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
my $header_line;
my $seq;
my $uniqueID;
open (my $fh,"$ARGV[0]") or die "Failed to open file: $!\n";
open (my $out_fh, ">$ARGV[0]_longer_ID_MMETSP.fasta");
while( <$fh> ){
if ($_ =~ m/^(\S+)\s+(.*)/) {
$header_line = ;
$seq = ;
$uniqueID = $currentId++;
print $out_fh "$header_line$uniqueID\n$seq";
} # if
} # while
close $fh;
close $out_fh;
非常感谢,任何想法将不胜感激。
您的程序无法运行,因为正则表达式 ^(\S+)\s+(.*)
匹配输入文件中的每一行。例如,\S+
匹配 CTTCATCGCACATGGATAACTGTGTACCTGACT
;行尾的换行匹配\s+
;没有匹配 .*
.
以下是我对您的解决方案进行编码的方式。它只是将 $current_id
附加到包含竖线 |
字符
的任何行的末尾
use strict;
use warnings;
use 5.010;
use autodie;
my ($filename) = @ARGV;
my $current_id = 'a' x 57;
open my $in_fh, '<', $filename;
open my $out_fh, '>', "${filename}_longer_ID_MMETSP.fasta";
while ( my $line = <$in_fh> ) {
chomp $line;
$line .= $current_id if $line =~ tr/|//;
print $line, "\n";
}
close $out_fh;
输出
MMETSP0259|AmphidiniumCMP1314aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
CTTCATCGCACATGGATAACTGTGTACCTGACT
TCTGGGAAAGGTTGCTATCATGAGTCATAGAAT
我想将随机字符串添加到 fasta 文件中的现有标识符行。 所以我得到:
MMETSP0259|AmphidiniumcarteCMP1314aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
然后下一行的顺序正常。我认为格式输出有问题。这是我得到的:
MMETSP0259|AmphidiniumCMP1314aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
CTTCATCGCACATGGATAACTGTGTACCTGACTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
TCTGGGAAAGGTTGCTATCATGAGTCATAGAATaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
它被添加到每一行。 (我改变了长度以适合这里。)我只想添加到标识符行。
这是我目前所拥有的:
use strict;
use warnings;
my $currentId = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
my $header_line;
my $seq;
my $uniqueID;
open (my $fh,"$ARGV[0]") or die "Failed to open file: $!\n";
open (my $out_fh, ">$ARGV[0]_longer_ID_MMETSP.fasta");
while( <$fh> ){
if ($_ =~ m/^(\S+)\s+(.*)/) {
$header_line = ;
$seq = ;
$uniqueID = $currentId++;
print $out_fh "$header_line$uniqueID\n$seq";
} # if
} # while
close $fh;
close $out_fh;
非常感谢,任何想法将不胜感激。
您的程序无法运行,因为正则表达式 ^(\S+)\s+(.*)
匹配输入文件中的每一行。例如,\S+
匹配 CTTCATCGCACATGGATAACTGTGTACCTGACT
;行尾的换行匹配\s+
;没有匹配 .*
.
以下是我对您的解决方案进行编码的方式。它只是将 $current_id
附加到包含竖线 |
字符
use strict;
use warnings;
use 5.010;
use autodie;
my ($filename) = @ARGV;
my $current_id = 'a' x 57;
open my $in_fh, '<', $filename;
open my $out_fh, '>', "${filename}_longer_ID_MMETSP.fasta";
while ( my $line = <$in_fh> ) {
chomp $line;
$line .= $current_id if $line =~ tr/|//;
print $line, "\n";
}
close $out_fh;
输出
MMETSP0259|AmphidiniumCMP1314aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
CTTCATCGCACATGGATAACTGTGTACCTGACT
TCTGGGAAAGGTTGCTATCATGAGTCATAGAAT