У меня есть огромный файл, в котором есть данные, и я пытаюсь найти строку в каждой строке. и просто сохраните эту часть поиска, а не всю строку в массиве.
Вот код, который я пробовал
use warnings;
use Data::Dumper;
my $start_run = time();
while (<DATA>){
my $line=$_ ;
if ($line =~ m/Date/) {
my @result = grep (/Date/, $line);
print @result;
}
}
#####
my $end_run = time();
my $run_time = sprintf "%.2f", (($end_run - $start_run) / 60);
print "Elapsed: $run_time minutes\n";
__DATA__
ServerName: (DESCRIPTION=(CONNECT_TIMEOUT=60)(RETRY_COUNT=5)(ADDRESS=(PROTOCOL=TCP)(HOST=xbian.dbaas.ing.net)(PORT=121))(CONNECT_DATA=(SERVER=DEDI)(SERVICE_NAME=pmx0))) ServerType: Oracle DatabaseName: MX_FN_OWNER RDBMSAccess: NATIVE_OCI ConnectionName: Mx0_MUXFO_1_1 ConnectionNo: 1 Date: 2020-03-29 08:58:10
insert into MX_FN_OWNER.TRN_EDBF (TIMESTAMP,M_IDENTITY,M_REFERENCE,M_USER,M_GROUP,M_DESK,M_DATE_SYS,M_DATE_CMP,M_TIME_CMP,M_SDATE_CMP,M_STIME_CMP,M_COMMENT,M_ERROR,M_START_END,M_TIME_CPU,M_TIME_SYB,M_TIME_ELAP,M_SCRPT_NAME,M_UNIT_NAME,M_ERR_COUNT,M_NPID) values (0,TRN_EODA_DBFS.nextval,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19) (Bulk_Copy begin, 19 columns, 1 Flush size)
==============================================
ServerName: (DESCRIPTION=(CONNECT_TIMEOUT=60)(RETRY_COUNT=5)(ADDRESS=(PROTOCOL=TCP)(HOST=xb305-scan.net)(PORT=121))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=pmx02fn))) ServerType: Oracle DatabaseName: MX_FN_OWNER RDBMSAccess: NATIVE_OCI ConnectionName: Mx0_MXFO_168991_1 ConnectionNo: 1 Date: 2020-03-29 09:21:10
Mux execution time: 00:00:00 3 ms
Видимо, в каждой строке есть Дата, и меня просто интересуют Дата и время у него есть sp, что я могу вычесть время между двумя строками и сохранить его. Но когда я пытаюсь grep, вывод - целая строка. я не могу разбить строку, так как нет разделителя.
Есть ли способ, которым я могу просто получить дату: 2020-03-29 09:21:10, связанную с каждой строкой
Сценарий преобразования
#!/usr/bin/perl
use strict;
use warnings;
use DateTime::Format::Strptime;
my $parser = DateTime::Format::Strptime->new(
pattern => 'd{4}-\d{2}-\d{2}\h+\d{2}:\d{2}:\d{2}',
on_error => 'croak',
);
my $dt = $parser->parse_datetime('2020-03-29 08:58:10');
print "$dt\n";
Спасибо