Perl:从矩阵文件中提取某些值

时间:2016-09-09 05:27:09

标签: perl file matrix extract

给定像文本文件这样的矩阵,我想提取包含值>的所有行(\t是分隔符)。在第3列(pos 2)中的60和值>在第6位(位置5)80并将输出发送到另一个文件。到目前为止我得到了:

#!/usr/bin/perl;
use strict;
use warnings;
use diagnostics;

open(my $in, "file.txt")or die $!;
my $line = <$in>;
my $count;
while (<$in>) {
   chomp;
   my @element = split (/\t/,$_);
   if ($element[2] >= 60 && $element[5] > 80){
       $count++; 
   }
}
close $in;
print $count;

有什么问题? Thanks.PS。我发现了类似的问题,但是我的低级别Perl技能使我无法解决问题。

3 个答案:

答案 0 :(得分:0)

  1. 您忘了在<
  2. 中添加阅读模式(open
  3. 确保文件中的行实际上是以制表符分隔的。
  4. 以下对我来说很好。

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    open(my $in, "<", "file.txt") or die $!;
    
    my $count;
    
    while (<$in>) {
       chomp;
       my @element = split (/\t/,$_);
       if ($element[2] >= 60 && $element[5] > 80){
           $count++; 
       }
    }
    
    close $in;
    print $count;
    

    file.txt

    10  20  60  40  50  90  70  80
    10  20  20  40  50  30  70  80
    10  20  40  40  50  50  70  80
    10  20  65  40  50  80  70  80
    10  20  70  40  50  90  70  80
    10  20  50  40  50  90  70  80
    

    即。第一行和第五行满足if条件。

答案 1 :(得分:0)

我已经复制粘贴代码,因为你刚刚编写它并且我已经替换了文本文件的内容但仍然收到以下错误消息:

Use of uninitialized value $element[2] in numeric ge (>=) at C:\Perl64\Temp1\ex.pl line 12, <$in> line 1.
Use of uninitialized value $element[2] in numeric ge (>=) at C:\Perl64\Temp1\ex.pl line 12, <$in> line 2.
Use of uninitialized value $element[2] in numeric ge (>=) at C:\Perl64\Temp1\ex.pl line 12, <$in> line 3.
Use of uninitialized value $element[2] in numeric ge (>=) at C:\Perl64\Temp1\ex.pl line 12, <$in> line 4.
Use of uninitialized value $element[2] in numeric ge (>=) at C:\Perl64\Temp1\ex.pl line 12, <$in> line 5.
Use of uninitialized value $element[2] in numeric ge (>=) at C:\Perl64\Temp1\ex.pl line 12, <$in> line 6.
Use of uninitialized value $count in print at C:\Perl64\Temp1\ex.pl line 18.

对此有何看法?

答案 2 :(得分:0)

我重新创建了文件,标签分开并仍然给出:

Use of uninitialized value $count in print at C:\Perl64\Temp1\ex.pl line 19.

第19行是print $count;