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;