in reply to Re^2: Robocopy log parsing
in thread Robocopy log parsing
I think you want something like that:
use warnings; use strict; my $filename = $ARGV[0]; #$filename = 'robocopy_log.txt'; open my $hin, '<', $filename or die "Cannot open file /$filename/"; my @fcont = <$hin>; my ( $dir, $txt, $nbytes, $file_found, $sav_dir, $sav_file ); foreach my $line (@fcont) { if ( $line =~ /New File|New Dir/ ) { ($dir) = $line =~ /New Dir\s+(?:[0-9]+|[0-9]+?\.[0-9]+? +\s[a-z])\s(.*)/; ($file_found) = $line =~ /New File\s+(?:[0-9]+|[0-9]+?\.[0-9]+ +?\s[a-z])\s(.*?)\s+?/; ( $txt, $nbytes ) = $line =~ /(New File|New Dir)\s+([0-9]+|[0- +9]+?\.[0-9]+?\s[a-z])\s.*/; $sav_dir = $dir if $dir; $sav_file = $file_found if $file_found; $sav_dir = !defined $sav_dir ? q{} : $sav_dir; $sav_file = !defined $sav_file ? q{} : $sav_file; print join( "\t\t", $txt, $sav_dir, $nbytes, $sav_file ) . "\n +"; } } close $hin;
Also look at this example, how to avoid $1, $2, ... matching parameters, you can directly assing the result to a list of variables
You also can try to put the three assignments in ony line, this is left as an exercise ;-)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Robocopy log parsing
by Anonymous Monk on Jun 01, 2012 at 09:26 UTC | |
by Anonymous Monk on Jun 01, 2012 at 09:36 UTC | |
|
Re^4: Robocopy log parsing
by bit5nip3r (Initiate) on Jun 01, 2012 at 14:26 UTC |