我使用perl脚本读取了一个txt文件,但我想知道如何使用模式匹配将txt文件中的每一行存储到perl脚本中的不同变量中。我可以使用〜^> gi匹配一条线,但它显示来自txt文件的两行> gi(即第1行和第3行),我也希望将两个单独的DNA序列读入不同的变量。考虑下面的例子。
file.txt的
>gi102939
GATCTATC
>gi123453
CATCGACA
perl脚本:
#!/usr/local/bin/perl
open (MYFILE, 'file.txt');
@array = <MYFILE>;
($first, $second, $third, $fourth, $fifth) = @array;
chomp $first, $second, $third, $fourth, $fifth;
print "Contents:\n @array";
if (@array =~ /^>gi/)
{
print "$first";
}
close (MYFILE);
答案 0 :(得分:2)
假设>gi..
在输入中是唯一的,请填充每个键与序列关联的哈希:
#!/usr/bin/perl
use warnings;
use strict;
my %hash;
my $last;
while (<DATA>) {
chomp;
if (/^>gi/) {
$last = $_;
} else {
$hash{$last} = $_;
}
}
foreach my $k (keys %hash) {
print "$k => $hash{$k}\n";
}
__DATA__
>gi102939
GATCTATC
>gi123453
CATCGACA
答案 1 :(得分:1)
请始终 use strict
和use warnings
位于您的计划顶部,并在首次使用时使用my
声明您的变量。这尤其适用于您寻求帮助时,因为这样做可以经常揭示可能被忽视的问题。
目前,您的程序会将文件读入@array
并打印出来。测试if (@array =~ /^>gi/) { ... }
将强制数组上的标量上下文,因此将数组中的元素数量(可能是5
)与正则表达式模式进行比较并失败。
你到底想要达到什么目的?将文件读入数组会将每一行放入不同的标量变量中 - 变量是数组的元素
答案 2 :(得分:0)
这个单行读取数据库并提取一个元素:
perl < file.txt -e '@array=<>;chomp @array;%hash=@array;print $hash{">gi102939"}'
结果:
GATCTATC