想要将随机字符串添加到 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