Пожалуйста, посмотрите следующий фрагмент кода для демонстрации того, как достичь желаемого результата
Я считаю, что регулярное выражение для команды должно быть сформировано по-другому. Пропустить все записи, не соответствующие регулярному выражению. Затем замените первые 5 столбцы данных на пустые и напечатайте результат.
use strict;
use warnings;
use feature 'say';
my @team = ("AP","II","DS","WJ", "JK","LC","BJ");
my $re_team = join ': |', @team;
my $filename = shift;
open(my $fh, '<', $filename)
or die "Could not open file $filename $!";
while( <$fh> ) {
chomp;
next unless /$re_team/;
s/^(\S+ ){5}//;
say;
}
close $fh;
Входные данные
30th Mar 2020 5:53:18 pm Charlie Brown: BJ: Bloomberg Runs
30th Mar 2020 5:53:27 pm Charlie Brown: DS: ICE DATA = INC1018483661
30th Mar 2020 6:42:43 pm Boris Yeltsin: Cortese's ICE logs is for the Bloomberg Runs issue
30th Mar 2020 6:43:28 pm Charlie Brown: yeap
31st Mar 2020 4:11:22 am Ishtar Johnson: VK : RE: XS2018777099 & XS2018777172 - INC1018491954
31st Mar 2020 6:31:17 am Tommy Boy: NW: RE: SABSM 6.125 YTW - INC1018495843
31st Mar 2020 7:26:40 am Tommy Boy: AP: RE: Rolling 7yrs - INC1018497102
31st Mar 2020 7:45:36 am Tommy Boy: JK: RE: Chris White books - INC1018497380
Вывод
Charlie Brown: BJ: Bloomberg Runs
Charlie Brown: DS: ICE DATA = INC1018483661
Tommy Boy: AP: RE: Rolling 7yrs - INC1018497102
Tommy Boy: JK: RE: Chris White books - INC1018497380
Замена * От 1014 * до s/^(\S+ ){7}//;
, чтобы получить следующий вывод
BJ: Bloomberg Runs
DS: ICE DATA = INC1018483661
AP: RE: Rolling 7yrs - INC1018497102
JK: RE: Chris White books - INC1018497380
Конечно, код можно записать как
use strict;
use warnings;
use feature 'say';
my @team = ("AP","II","DS","WJ", "JK","LC","BJ");
my $re_team = join ': |', @team;
my $filename = shift;
open(my $fh, '<', $filename)
or die "Could not open file $filename $!";
/($re_team)/ && say /($1.*)/ while <$fh>;
close $fh
Или даже так
use strict;
use warnings;
use feature 'say';
my @team = ("AP","II","DS","WJ", "JK","LC","BJ");
my $re_team = join ': |', @team;
/($re_team)/ && say /($1.*)/ while <>;
Вывод
BJ: Bloomberg Runs
DS: ICE DATA = INC1018483661
AP: RE: Rolling 7yrs - INC1018497102
JK: RE: Chris White books - INC1018497380
Если необходимо захватить данные
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my @team = ("AP","II","DS","WJ", "JK","LC","BJ");
my $re_team = join ': |', @team;
my @data;
/($re_team)/ && push @data,/($1.*)/ while <>;
say Dumper(\@data);
Вывод
$VAR1 = [
'BJ: Bloomberg Runs',
'DS: ICE DATA = INC1018483661',
'AP: RE: Rolling 7yrs - INC1018497102',
'JK: RE: Chris White books - INC1018497380'
];