1

我使用 perl 脚本读取了一个 txt 文件,但我想知道如何使用模式匹配将 txt 文件中的每一行存储到 perl 脚本中的不同变量中。我可以使用 ~^>gi 匹配一行,但它使用 >gi 显示 txt 文件中的两行(即第 1 行和第 3 行),我还想将两个单独的 DNA 序列读入不同的变量。考虑下面我的例子。

文件.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);
4

3 回答 3

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
于 2012-08-24T16:49:47.557 回答
1

始终 use strict在程序的顶部,并在第一次use warnings使用时声明您的变量my。当您寻求帮助时,这尤其适用,因为这样做经常会发现可能被忽略的简单问题。

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

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

于 2012-08-24T16:53:13.743 回答
0

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

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

结果:

GATCTATC
于 2012-08-24T16:57:31.867 回答