Claudia Agrelo wrote:

> I am new with Perl, can someone help me?
> I have the following LOG file, i want to extract the date (Thu Nov 30
> 14:12:07 CET 2006)
> and the amount of httpd instances running (30). I am making the script
> and i was able to
> extract the number of instances but i really dont know how can i parse
> perl to extract the
> date.
> I would really appreciate your help
> Thanks
> Ana
>  
> ###########################LOG#########################
>  
> green Thu Nov 30 14:12:07 CET 2006 All processes are OK
>  
> &green /usr/local/apache2/bin/httpd -k start -DSSL >=1 - 30 instances
> running
>  
> Status unchanged in 21.59 days
> Status message received from 197.123.18.79
>  
> ################## SCRIPT ####################################

I'm assuming the lines you want are always the first two (change if not true):

my $log = 'somelogfile.log';

open LOG, $log;
my $lineno = 0;
while (defined ($line = <LOG>)) {
        chomp $line;
        ++$lineno;
        print "$lineno: $line\n" if $debug;
        if ($lineno == 1) {
#               green Thu Nov 30 14:12:07 CET 2006 All processes are OK
                my @f = split ' ', $line;       # split words
                printf "%s: date='%s'\n", $log, join ' ', @f[1..6];
        } elsif ($lineno == 2) {
                if ($line =~ /^\&(green|yellow|red).*\s+(\d+)\s+instances/i) {
                        print "$log: Instances $2\n";
                } else {
                        print "$log: Bad instance line $line\n";
                }
        } else {
                last;   # after two lines quit
        }
}
close LOG;

__END__

> open(LOG,"$log");
>    while ( defined ($line = <LOG>) ) {
>           chomp $line;
>     #print "$line\n";
>     # ensure colour is valid - ie don't graph purple results
>            if($line =~ /green|yellow|red/) {
>      
>      
>           # if($line =~ /(\d+)\s+instances/o){
>                    $httpd=$1;
>          print "las instancias de $host son $httpd\n";
>      }
>               $colour_check="ok";
>     }
>        if ($colour_check ne "ok") {
>     print "$0: WARN $host is not showing red, yellow, or green. $log
> skipped.\n" if ($ENV{'WARN'});
>     }
>     
>    }
>    if ($colour_check=="ok"){
>     $text = "httpd instances: $httpd  \n,";
>  
> ####################################################################
_______________________________________________
Perl-Unix-Users mailing list
Perl-Unix-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to