#!/usr/bin/perl use strict; # sollte Pflicht sein, siehe auch im Wiki (FAQ) use warnings; my @filter = ("failure"); # hier noch weiter Filterworte eintragen my $file = '/path/to/log.file'; my $outfile = '/path/to/result.file'; my $application = 'ClusterService'; my $severity = 'critical'; my @lines; my $re = join '|', @filter; { # aendere den "input_separator" (siehe perldoc perlvar) local $/ = "\n====="; open my $fh, '<', $file or die $!; # gehe durch die ganze Datei while( my $line = <$fh> ){ chomp $line; # wenn eines der gesuchten Worte in der Zeile steht if( $line =~ /MESSAGE: (?:$re)/ ){ my ($timestamp) = $line =~ /=+\r?\n\w+\s\w+\s\w{3}\s\w{3}\s(\d+:\d+:\d+)/; my ($hostname) = $line =~ /on Node: (\w+)/; my ($message) = $line =~ /MESSAGE: (.*)/; my $entry = sprintf "%s::%s::%s::%s::%s", $timestamp, $application, $severity, $hostname, $message; push @lines, $entry; } } } open my $out, '>', $outfile or die $!; print $out $_,"\n" for @lines; close $out;