У меня есть два файла. seq.fasta
состоит из последовательностей FASTA, а ids.txt
содержит идентификаторы для последовательностей, извлекаемых из seq.fasta
Например
seq.fasta
>AUP4056.1
MFKSLIQFFKSKSNTSNIKKENAVQRQERQDIEGWITPYSGQELLNTELRQHHLGLLWQQVSMTREMFEH
LYQKPIERYAEMVQLLPASESHHHSHLGGMLDHGLEVISFAAKLRQNYVLPLNAAPEDQAKQKDAWTAAV
IYLALVHDIGKSIVDIEIQLQDGKRWLAWHGIPTLPYKFRYIKQRDYELHPVLGGFIANQLIAKETFDWL
ATYPEVFSALMYAMAGHYDKANVLAEIVQKADQNSVALALGGDITKLVQKPVISFAKQLI`
>XIM5213
FKISSKGPGDGWLTEDGLWLMSKTTADQIRAYLMGQGISVPSDNRKLFDEMQAHRVIESTSEGNAIWYCQ
LSADAGWKPKDKFSLLRIKPEVIWDNIDDRPELFAGTICVVEKENEAEEKISNTVNEVQDTVPINKKENI
ELTSNLQEENTALQSLNPSQNPEVVVENCDNNSVDFLLNMFSDNNEQQVMNIPSADAEAGTTMILKSEPE
NLNTHIEVEANAIPKLPTNDDTHLKSEGQKFVDWLKD
>bcna2598.1
GPGDGWLTEDGLWLMSKTTADQIRAYLMGQGISVPSDNRKLFDEMQAHRVIESTSEGNAIWYCQ
LSADAGWKPKDKFSLLRIKPEVIWDNIDDRPELFAGTICVVEKENEAEEKISNTVNEVQDTVPINKKENI
ELTSNLQEENTALQSLNPSQNPEVVVENCLPTNDDTHLKSEGQK
ids.txt
AUP4056.1 bcna2598.1 YUP42568 CAD42579.3
JIK6023.5 ZNB708645
Я попробовал следующую программу, предоставленную в качестве ответа на
Как извлечь последовательности FASTA из файла, используя идентификаторы последовательностей в другом файле?
но он просто копирует файл seq.fasta
в вывод.
код Perl
#!/usr/bin/env perl
use strict;
use warnings;
open ( my $id_file, '<', 'ids.txt' ) or die $!;
#use split here, to split any lines on whitespace.
chomp ( my @ids = map { split } <$id_file> );
close ( $id_file );
my %sequences;
open ( my $input, '<', 'seq.fasta' ) or die $!;
{
local $/ = ''; #paragraph mode; Read until blank line
while ( <$input> ) {
my ( $id, $sequence ) = m/>\s*(\S+)\n(.*)/ms;
$sequences{$id} = $sequence;
}
}
foreach my $id ( @ids ) {
if ( $sequences{$id} ) {
print ">$id\n";
print "$sequences{$id}\n";
}
}
close ($input);
exit;
Может кто-нибудь сказать мне, где я ошибся?
UPDATE:
Я хочу сохранить вывод в отдельном файле.