簡體   English   中英

Perl:從矩陣文件中提取某些值

[英]Perl: extracting certain values from matrix file

給定像文本文件這樣的矩陣,我想提取所有包含第3列(位置2)中的值> 60和第6列(位置5)中的值> 80的行( \\t是分隔符)並發送輸出到另一個文件。到目前為止,我得到了:

#!/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;

怎么了? 謝謝。 我發現了類似的問題,但是我的Perl較低的技能使我無法解決問題。

  1. 您忘記了在open下添加讀取模式( < )。
  2. 確保文件中的行確實用制表符分隔。

下面對我來說很好。

#!/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條件。

我已經復制粘貼代碼,就像您剛剛編寫的那樣,但是我enev替換了文本文件的內容,但仍然收到以下錯誤消息:

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.

有什么看法嗎?

我重新創建了文件,將制表符分隔並仍然給出:

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

第19行是print $count;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM