-2

如果你们中的任何一个人可以修改代码,以便在文件 2 中搜索文件 1 中的序列名称,并且如果存在匹配,则将文件 1 中的行及其下一行复制到一个输出文件中。现在代码只复制匹配的标题,而不是它的下一行,即输出文件的序列。谢谢

例如:

文件 1:

序列 1 名称

序列 2 名称

序列 3 名称

文件 2:

序列 1 名称

AGTCAGTCAGTCAGTCAGTC

序列 2 名称

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

序列 3 名称

GGGGTTTTTTTTTTTAAAAAC

序列 4 名称

AAGTCCCCCCCCCCAAGGTT

等等

文件:

序列 1 名称

AGTCAGTCAGTCAGTCAGTC

序列 2 名称

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

序列 3 名称

GGGGTTTTTTTTTTTAAAAAC

code: 

use strict;
use warnings;

my $f1 = 'FILE1.fasta';
open FILE1, "$f1" or die "Could not open file \n";
my $f2= 'FILE2.fasta';
open FILE2, "$f2" or die "Could not open file \n";

my $outfile = $ARGV[1];

my @outlines;
my $n=0;
foreach (<FILE1>) {
    my $y = 0;
    my $outer_text = $_ ;


    seek(FILE2,0,0);
    foreach (<FILE2>) {
        my $inner_text = $_;

        if($outer_text eq $inner_text) {    

            print "$outer_text\n";
            push(@outlines, $outer_text);
            $n++;

        }
    }
}
open (OUTFILE, "sequences.fasta") or die "Cannot open $outfile \ +n";
print OUTFILE @outlines;
close OUTFILE;
4

2 回答 2

0

对于非常大FILE1的,%seen哈希可以绑定到一些DBM存储,

use strict;
use warnings;

my $f1 = 'FILE1.fasta';
open FILE1, "<", $f1 or die $!;
my $f2 = 'FILE2.fasta';
open FILE2, "<", $f2 or die $!;

# my $outfile = $ARGV[1];
open OUTFILE, ">", "sequences.fasta" or die $!;

my %seen;
while (<FILE1>) {
    $seen{$_} = 1;
}

while (<FILE2>) {
    my $next_line = <FILE2>;

    if ($seen{$_}) {    
        print OUTFILE $_, $next_line;
    }
}
close OUTFILE;
于 2013-08-12T17:37:01.317 回答
0

我会将文件 2 的内容放入哈希中,然后检查文件 1 中的每条记录是否在哈希中:

#!perl
use strict;
use warnings;

my $f2= 'FILE2.fasta';
open FILE2, "$f2" or die "Could not open file \n";

my $k;
my $v;
my %hash;

while (defined($k = <FILE2>)) {
        chomp $k;
        $v = <FILE2>;
        $hash{$k} = $v;
}

my $f1 = 'FILE1.fasta';
open FILE1, "$f1" or die "Could not open file \n";

open (OUTFILE, ">sequences.fasta") or die "Cannot open seqeneces.fasta\n";
while (<FILE1>) {
        chomp;
        if (exists($hash{$_})) {
                print OUTFILE "$_\n";
                print OUTFILE "$hash{$_}\n";
       }
}

close OUTFILE;
于 2013-08-12T18:09:26.883 回答