Форма регулярное выражение для сопоставления интересующих записей, разделение строки на поля и сравнение поля № 5 с ДА . Если есть совпадение, увеличьте счетчик для поля № 2 в %match
ha sh.
После обработки файла %match
ha sh будет иметь совпадающие записи в поле № 2 в качестве ключа и значения отражает , сколько раз это поле совпадало с ДА в файле.
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my %match;
my @look_for = qw(RT0AC1 WG3RA3);
my $re_filter = join('|',@look_for);
while(<DATA>) {
chomp;
next unless /$re_filter/;
my @data = split(',',$_);
$match{$data[1]}++ if $data[4] eq 'YES';
}
say Dumper(\%match);
__DATA__
101,RT0AC1,CONNECTED,FAULTY,NO
102,RT0AC1,CONNECTED,WORKING,YES
103,RT0AC1,NOT CONNECTED,WORKING,NO
104,WG3RA3,NOT CONNECTED,DISABLED,NO
105,WG3RA3,CONNECTED,WORKING,NO
Вывод
$VAR1 = {
'RT0AC1' => 1
};
Удалить DATA
чтобы получить окончательный код и указать имя файла в командной строке для обработки файла с интересующими данными
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my %match;
my @look_for = qw(RT0AC1 WG3RA3);
my $re_filter = join('|',@look_for);
while(<>) {
chomp;
next unless /$re_filter/;
my @data = split(',',$_);
$match{$data[1]}++ if $data[4] eq 'YES';
}
say Dumper(\%match);
Альтернативная версия на основе регулярного выражения без использования split
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my %match;
my @look_for = qw(RT0AC1 WG3RA3);
my $re_filter = join('|',@look_for);
my $regex = qr/^\d+,($re_filter),[^,]+,[^,]+,YES$/;
/$regex/ && $match{$1}++ for <DATA>;
say Dumper(\%match);
__DATA__
101,RT0AC1,CONNECTED,FAULTY,NO
102,RT0AC1,CONNECTED,WORKING,YES
103,RT0AC1,NOT CONNECTED,WORKING,NO
104,WG3RA3,NOT CONNECTED,DISABLED,NO
105,WG3RA3,CONNECTED,WORKING,NO