Perl中的程序从文件读取,查找包含特定字符的行并打印它们。 ×22510

时间:2012-11-19 12:06:38

标签: perl

我一直在学习Perl几天,我是全新的。

代码应该从一个大文件中读取,如果一行包含“警告”,它应该存储它并将其打印在一个新行上,并计算每种类型警告的出现次数。文件中有不同类型的警告,例如“警告GR145”或“警告GT10”等。

所以我想打印像

这样的东西
Warning GR145 14 warnings
Warning GT10  12 warnings

等等

问题在于,当我运行它时,它不会打印整个警告列表。 我将感谢你的帮助。这是代码:

use strict;
use warnings;

my @warnings;

open (my $file, '<', 'Warnings.txt') or die $!;

while (my $line = <$file>)  {
  if($line =~ /warning ([a-zA-Z0-9]*):/) {
    push (@warnings, $line);
    print $1 ,"\n";
  }
}

close $file;

2 个答案:

答案 0 :(得分:1)

您在if声明中使用区分大小写的匹配。尝试添加/i

if($line =~ /warning ([a-z0-9]*):/i)

编辑:我误解了实际问题,所以这个答案可能会被忽略......

答案 1 :(得分:0)

您需要使用哈希数组,即从警告字符串到出现次数的映射。

use strict;
use warnings;

my %warnings = {};

open (my $file, '<', 'Warnings.txt') or die $!;
while (my $line = <$file>)  {
    if ($line =~ /warning ([a-zA-Z0-9]*)\:.*/) {
        ++$warnings{$1};
    }
}
close $file;

foreach $w (keys %warnings) {
    print $w, ": ", $warnings{$w}, "\n";
}