Perl - 通过文件进行操作

时间:2014-01-20 14:26:12

标签: perl loops

我有一个类似的文件:

>Sequence1
AAAAASSSSSSSSDDD
BBHSHSJSKJSKJSSS
SJKÑLSDJFSLSLJKS
>Sequence2
AAASSSSSSSSSSDDW

最多55个序列。

我需要将每个序列(例如AAAAASSSSSSSSDDD)保存到另一个变量中。所以我应该创建尽可能多的变量,因为序列有我的文件。

直到现在我有:

#!/usr/bin/perl

while (<>) {
    if (/^>/) {
        $count++;
        next;
    }
}

print $count;     #It prints 55.

我该怎么办?我迷失了动态变量......

3 个答案:

答案 0 :(得分:3)

作业所需的工具称为 array 。有关文档,请参阅perldata

my $count = -1;
my @sequences;

while (<>) {
    if (/^>/) {
        $count++;
    } else {
        $sequences[$count] .= $_;
    }
}

您使用Bio::Perl吗?

答案 1 :(得分:3)

我会使用这样的哈希:

my %sequences;
my $key;
while (<>) {
    chomp;
    if (/^>(\w+)/) {
        $key = $1;
        next;
    }
    $sequences{$key} = $_;
}

最后一句话可能是:

    $sequences{$key} .= $_;

您也可以使用数组哈希:

my %sequences;
my $key;
while (<>) {
    chomp;
    if (/^>(\w+)/) {
        $key = $1;
        next;
    }
    push @{$sequences{$key}}, $_;
}

答案 2 :(得分:1)

使用如下数组:

#!/usr/bin/perl

my @sequences;
while (<>) {
    if (/^>/) {
        $count++;
        next;
    }
    else
    {
        chomp $_;
        push @sequences, $_;
    }
}

print $count;     #It prints 55.

现在你有一个包含所有序列的数组,有序且全部。