Perl-从txt文件中提取每一行并存储到不同的变量中

时间:2012-08-24 16:42:31

标签: perl

我使用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);

3 个答案:

答案 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 strictuse warnings位于您的计划顶部,并在首次使用时使用my声明您的变量。这尤其适用于您寻求帮助时,因为这样做可以经常揭示可能被忽视的问题。

目前,您的程序会将文件读入@array并打印出来。测试if (@array =~ /^>gi/) { ... }将强制数组上的标量上下文,因此将数组中的元素数量(可能是5)与正则表达式模式进行比较并失败。

你到底想要达到什么目的?将文件读入数组会将每一行放入不同的标量变量中 - 变量是数组的元素

答案 2 :(得分:0)

这个单行读取数据库并提取一个元素:

perl < file.txt -e '@array=<>;chomp @array;%hash=@array;print $hash{">gi102939"}'

结果:

GATCTATC