Hallo zusammen,
ausgehend von diesem Ansatz, dass mein Skript alle Zeilen zwischen bestimmten Strings in ein Array bzw. eine Datei speichert, habe ich nun ein weiteres Feature im Auge.
In einem zweiten Schritt muss ich nach einem dritten String in dem Resultat suchen. Wenn dieser auftritt, muss ich genau diesen Block, zwischen dem StartString und EndString in ein Array bzw. eine Datei speichern.
Kurzum, benötigen ich ein zweistufigen Filtern einer SysLog-Datei.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl -w
# Version 0.2
########################################
# Modules
use strict; # parameter Definition before use them
#######################################
# Paramet Definition
my $ct=1; # counter parameter
my $lines;
#my $target ="./TestFile.log";
#my $file2 ="./SpyLogs.log";
my ($file1,$file2,$NoString,$Strg);
my $BString ="Start";
my $EString ="End";
my @data =("");
###########################
# main programm
system("clear");
###########################
print "Which File: ";
$file1=<STDIN>;
chomp $file1;
print "File-Name for Result: ";
$file2=<STDIN>;
chomp $file2;
print "Call-Number: ";
$Strg=<STDIN>;
chomp $Strg;
$NoString ="Number=$Strg";
#print $NoString;
open(InFile,"<",$file1) or die $!; # Get the file to the Script Input
open(OutFile,">",$file2) or die $!; # Get the file to the Script Output
while ($lines = <InFile>)
{
if ( $lines =~ m{$BString} .. $lines =~ m{$EString} ) {
if ($lines =~ m{$NoString}){
push(@data,$lines);} # tu was mit Zeilen von START bis ENDE (Regex Matching)
}
}
print OutFile @data; # Store information to File
close(InFile);close(OutFile); # close the files