http://qs1969.pair.com?node_id=550535

jstout13 has asked for the wisdom of the Perl Monks concerning the following question:

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. 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. Jeff Stout
#!/usr/bin/perl -w # # parselog.pl - Script to split log files by customer # use warnings; 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}${suf +fix}") or die ("Cannot open ${prefix}${thiscust}${ +suffix}"); } print $thiscust $_; } } foreach $thiscust (%cust) { close $thiscust; } exit 0;