Jeff Stout wrote: > I need help in extracting specific data from log files. > The log file has 51 fields I only need 11 fields from > that file. I need to "open" to a new file output with > only the data from the 11 fields.
Your code doesn't show which eleven fields you want to output. > The new file > will be specific to the customers. I have 10-20 customers > in each log file I need to create a new log file > per customer with only the pertinent data. > > Here is what I have so for, any suggestions or help with > this is thoroughly appreciated. > > > #!/usr/bin/perl -w > # > # parselog.pl - Script to split log files by customer > # > > use warnings; Using both the -w switch and the warnings pragma is redundant. > my $logfile; # input log file > my $media; # media type > my %cust; # hash of all customers found in $logfile > my $thiscust; # customer derived from current input line > my @fields; # input logfile fields > my $thiscustlog; # file handle to current customer's logfile > my $prefix; # cust logfile prefix > my $suffix; # cust logfile suffix > > > $logfile = $ARGV[0]; > > if ( $logfile =~ /WMS/ ) { > $media = "wms"; > $prefix = "/usr/home/script/${media}_cust/"; > $suffix = ".$media.log"; > } else { > die "Unknown file format"; > } > > open (LOGFILE, "< $logfile") or die ("Could not open $logfile."); > > while (<LOGFILE>) { > if ( /^[0-9]/ ) { > @fields = split; > $thiscust = (split /\//, $fields[4])[1]; > if ( ! exists ($cust{$thiscust}) ) { > print "customer $thiscust\n"; > $cust{$thiscust} = $thiscust; > open ($thiscust, ">> ${prefix}${thiscust}${suffix}") You are using a string as a filehandle, which is allowed, but not the best way to do it. print "customer $thiscust\n"; open my $fh, '>>', "$prefix$thiscust$suffix" or die "Cannot open $prefix$thiscust$suffix: $!"; $cust{ $thiscust } = $fh; > or die ("Cannot open > ${prefix}${thiscust}${suffix}"); > } > print $thiscust $_; You are printing out the complete input line. Which eleven fields did you want to print out. > } > } > foreach $thiscust (%cust) { > close $thiscust; > } You are iterating through all the keys and values in the hash. You probably just want either the keys or the values. for my $fh ( values %cust ) { close $fh; } > exit 0; John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>