-----Original Message----- From: John W. Krahn [mailto:[EMAIL PROTECTED] Sent: Thursday, September 13, 2007 12:42 PM To: Perl beginners Subject: Re: adding data to a file before it gets regexed
Moon, John wrote: > > thanks all for the replies, I'm trying to parse log files. > > so I got a bunch of logs in a directory, put them together and then > parse them, I'm trying to keep a reference of the log files, so I > know what log they came from, as I'm need to keep the file name to > put it in to a another script. > > I think from what people are suggesting I will have to use hashes, is > there any good example log file perl scripts out there? or a good site ? > > as I'm trying to take the logs that I find interesting and then display > them on a web page using html templates > > Thanks for all the help > Pat > > [>>] > Here's a "way" ... Hope this gives you some ideas... > > SUN83-PRODWEB>more ~/foo > #! /usr/local/bin/perl > use strict; > > opendir HERE, '.'; You should *always* verify that the directory opened correctly: opendir HERE, '.' or die "Cannot open '.' $!"; > my %logs; > my $logs_total; > while (my $filenm = readdir HERE) { > $logs_total++ if $filenm =~ 'log$'; > next unless $filenm =~ '^access_sun83.*log$'; > open LOG, $filenm; You should *always* verify that the file opened correctly: open LOG, '<', $filenm or die "Cannot open '$filenm' $!"; > my $cnt; > while (my $logdata = <LOG>) { > $cnt++; > } > close LOG; > $logs{$filenm} = $cnt; > } > close HERE; > printf "There are %d logs HERE\n", $logs_total; > printf "I processed %d logs\n", scalar(keys %logs); > foreach my $filenm (sort keys %logs) { > print "There are $logs{$filenm} items in $filenm\n"; > } Here is another way to do it: my $logs_total = () = <*log>; my $processed = @ARGV = <access_sun83*log>; my %logs; $logs{ $ARGV }++ while <>; print "There are $logs_total logs HERE\n"; print "I processed $processed logs\n"; for my $filenm ( sort keys %logs ) { print "There are $logs{$filenm} items in $filenm\n"; } John [>>] Look like it gave someone some ideas... ;-) Since we're "going there" you _should_ also check on *close* (on an output file) - may save you a lot of time... As for slurping in a "log" file ... some can be *very* large... -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/