To get multiple records for a child runID use a hash of arrays (HoA)
poj#!/usr/bin/perl use strict; #use Data::Dump 'pp'; my %data = (); my @id = (); my $reqid = '8274'; my $infile = 'worker.log'; my $outfile = 'data.CSV'; open IN,'<',$infile or die "$!"; # input while (<IN>) { chomp; next unless /Task:id=(\d+)/; my $taskid = $1; my (undef,$timestamp,undef) = split /\s+/,$_,3; if (/(Started|Done).+topic (\d+_(\d+)_\d+_IN_(\d).*)/){ #print "$1 $2 $3 $4\n"; $data{$3}[$4]{$1} = $timestamp; $data{$3}[$4]{'Topic'} = $2; } while ( /\{(\d+)-SUCCESSFUL\}/g ){ push @id,$1 if ($taskid eq $reqid); } } close IN; #pp \@id; #pp \%data; # output open OUT,'>',$outfile or die "$!"; my @cols = qw(Topic Started Done); printf OUT "%s,%s,%s\n",@cols; for my $id (sort @id){ if (exists $data{$id}){ for my $rec ( @{$data{$id}} ){ printf OUT "%s,%s,%s\n", map { $rec->{$_} } @cols; } }else { print OUT "$id- no data\n"; } } close OUT;
In reply to Re^7: Log Parsing
by poj
in thread Log Parsing
by piyushmnnit06
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |