Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用不同文件中的序列ID从文件中提取FASTA序列?_Perl_Fasta - Fatal编程技术网

Perl 如何使用不同文件中的序列ID从文件中提取FASTA序列?

Perl 如何使用不同文件中的序列ID从文件中提取FASTA序列?,perl,fasta,Perl,Fasta,我有两个文件: sequence.fasta-包含多个fasta序列的大文件 ids.txt-由制表符分隔格式的序列ID组成 我想从sequence.fasta中将这些序列提取到另一个文件中,该文件的ID在IDs.txt中匹配 sequence.fasta的示例 >AUP4056.1 MFKSLIQFKSKSNTSNIKKENAVQRQERQDIEGWITPYSGQELLLNTELRQHLGLLWQVSMTREMFEH LyqkPieryaemvqllpaseshhlggmldhglevisfa

我有两个文件:

sequence.fasta
-包含多个fasta序列的大文件

ids.txt
-由制表符分隔格式的序列ID组成

我想从
sequence.fasta
中将这些序列提取到另一个文件中,该文件的ID在
IDs.txt
中匹配

sequence.fasta的示例

>AUP4056.1
MFKSLIQFKSKSNTSNIKKENAVQRQERQDIEGWITPYSGQELLLNTELRQHLGLLWQVSMTREMFEH
LyqkPieryaemvqllpaseshhlggmldhglevisfaaklqnyvlplnaapedqakkdawtaav
Iylalvhdigksivdieiqdgkrawhgiptlpykfryikqrdyelhpvlggfianqliaketfdwl
ATYPEVFSALMYAMAGHYDANVQKADQNSVALLGGDITKLVQKPVISFAKQLI`
>XIM5213.2
FKISSKGPDGWLTEDGGLWLMSKTTADQIRAYLMGQGISVPSDNRKLFDEMQHRVIESTSEGNAIWYCQ
LsadagwkKfslrikpeviwdniddrPelfagticvvekenaekisntvnevqdtvpinkkeni
ELTSNLQEENTALQSLNPEVVVENCDNNSVDFLLNMFSDNEQVMNIPSADEAAGTTMILKSEPE
NLNTHIEVEAIPKLPTNDTHLKSEGQKFVDWLKD
ids.txt的示例

AUP4056.1 GUP5213.2 ARD5364.5 HAE6893.7
JIK6023.5 YUP7086.9
我需要输出如下

>AUP4056.1
MFKSLIQFKSKSNTSNIKKENAVQRQERQDIEGWITPYSGQELLLNTELRQHLGLLWQVSMTREMFEH
LyqkPieryaemvqllpaseshhlggmldhglevisfaaklqnyvlplnaapedqakkdawtaav
Iylalvhdigksivdieiqdgkrawhgiptlpykfryikqrdyelhpvlggfianqliaketfdwl
ATYPEVFSALMYAMAGHYDANVQKADQNSVALLGGDITKLVQKPVISFAKQLI
>GUP5213.2
ELTSNLQEENTALQSLNPEVVVENCDNNSVDFLLNMFSDNEQVMNIPSADEAAGTTMILKSEPE
NLNTHIEVAENAIPKLPTNDTHLKSEGQKFVDWLKDKLFKKQTFNDRTAKVHIVNDCLFIVSPSSFEL
YLQEKGESYDECINNLQYEFQALGLHRKRIKINDFWRCKVIGPKESFLvGYLVPNTRLFFGDKIL
因尔利酒店
我已经尝试了Perl单行程序,但这不起作用。既不给出任何错误也不给出任何输出

perl-ne'if(/^>(\S+/){$c=$i{$1}}$c?print:chomp$如果@ARGV'ids.txt sequence.fasta,则i{$\u}=1

有谁能帮我更正这段代码,或者是否还有其他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, '<', 'sequence.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";
   }
}

我不会试图把它压缩成一行,你可能会,但当你回到它的时候,你会很难理解

这里的问题是,一句话很难理解、理解和解开

所以写下“长手”:

#!/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, '<', 'sequence.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";
   }
}

我不会试图把它压缩成一行,你可能会,但当你回到它的时候,你会很难理解

如果一行是你想要的——事实上你的帖子暗示了这一点——那么你可以这样做:

perl -pe '$i=$1if/^>(\S+)/;map$i{$_}++,split;$i{$i}or$_=""' ids.txt seq.fasta

如果一行是你想要的——事实上你的帖子暗示了这一点——那么你可以这样做:

perl -pe '$i=$1if/^>(\S+)/;map$i{$_}++,split;$i{$i}or$_=""' ids.txt seq.fasta

请显示几行输入文件的样本行,以及所需的输出FASTA文件中的序列之间是否真的有空行?当输出不在您的序列中时,
>GUP5213.2
是如何生成的。FASTA
?请显示几行输入文件的样本行,以及所需的输出在FASTA文件中的序列之间真的有空行吗?如果不在您的
序列中,如何在输出中生成
>GUP5213.2
。FASTA
?如果您想“玩得开心”如果你发布这样的声明,那么像user8392790这样没有经验的人会想,“这个拥有700倍于我经验的家伙说一行是有趣的,并开始要求我们所有人帮助他参与这一有趣的事情”。然后我们必须说服他不要这样做。这是不负责任的。如果你想用一行程序“玩得开心”,那么请不要让我们这些喜欢清晰代码的人帮你。如果你发布这样的公告,那么像user8392790这样没有经验的人会想,“这个有着超过700倍我经验的家伙说一句台词很有趣,并开始要求我们所有人帮助他参与其中”“那么,我们必须说服他不要这样做。这是不负责任的。我怀疑FASTA文件实际上是连续的,没有任何空行。谢谢你有用的回答@kjetil和Sobrique。成功了!我怀疑FASTA文件实际上是连续的,没有任何空行。感谢您的有用回答@kjetil和Sobrique。成功了!