Hallo, danke für eure Antworten! Ich habe vorher viel mit euren Lösungsmöglichkeiten experimentiert allerdings bin ich noch nicht ans Ziel gekommen. Anbei das ganze Skript und der Dateiaufbau der einzelnen Dateien..
Als Anfänger tut man sich doch leider noch etwas schwer ;-) Danke nochmal für Eure Bemühungen !!
-IVS.txt
Beispieldaten:
s SUED+hans.mustermann /daten /IVS Daten
s WEST+peter.mustermann /eimer /IVS Eimer
----------------------------------------------
samba-liste.txt
Beispieldaten:
OST+jens.mustermann
NORD+andreas.mustermann
----------------------------------------------
ergebnis.txt
Beispieldaten- Abgeleitet aus der IVS.txt
SUED+hans.mustermann 0
----------------------------------------------
#!/usr/bin/perl
#Samba Log Datei mit IVS Log vergleichen
#Ziel: User, die den Samba Server nicht mehr benutzen, jedoch in Konfig Dateien stehen, sollen gefiltert werden
#Dateien: IVS.txt, samba-liste.txt, ergebnis.txt
#Einlesen und verarbeitung der IVS.txt
open (EINLESEN,'IVS.txt') || die "Kann Datei nicht öffnen";
$x = 0;
while (<EINLESEN>)
{
chomp;
next if ($_=~ /^\#/); # Balnk ausblenden bzw. übergehen
next if ($_=~ /^\s*$/); # Markiert eine Leerzeile(Tabulator oder Blank)
next if ($_=~ /\@/);
($key,$keys,$ort,$info) = split(/\s+/); #\s= Leerzeichen, +=beliebige Folge des vorhergehenden Zeichens
$NAME{$keys}=$NAME{$keys}=0
}
close (EINLESEN);
# Einlesen und verarbeiten der Samba Config
print "samba-liste.txt wird eingelesen\n";
print "\n";
open (EINLESEN1,'samba-liste.txt') || die "Kann Datei nicht öffnen";
$x = 0;
while (<EINLESEN1>)
{
chomp;
next if ($_=~ /Q4DEMRSA001/);
next if ($_=~ /^\+/);
$NAME{$_}++; #Hash heißt %Name1 mit aktueller Zeile als Key und der Value ist Nummerierung
}
close (EINLESEN1);
print "samba-log.txt wird mit IVS.txt verglichen \n";
print "Ergebnis in der ergebnis.txt\n";
print "\n";
open (SCHREIBEN, ">ergebnis.txt");
$zeit=gmtime(); # Zeitstamp in das Skalar $zeit
print SCHREIBEN "'Folgende Benutzer sind in der IVS.txt aber NICHT in der Samba Log vorhanden\n";
print SCHREIBEN "\n";
print SCHREIBEN "'$zeit\n";
print SCHREIBEN "\n";
foreach $x (sort keys %NAME)#Schleife über alle(sortierten) Keys des Hashes %Name
{
if ($NAME{$x}==0) # Wenn Hash Name dazugehöriger Key 2 ist
{
print SCHREIBEN "$x $NAME{$x}\n"; #Gib aus Key von Hash %Name mit $key als Key
}
}
close (SCHREIBEN);
# 2. Schritt - Sicherungskopie der IVS.txt in IVS.bak
open FROM, "<IVS.txt";
open TO, ">IVS.bak";
while (read FROM, $inhalt,1)
{
print TO $inhalt;
}
close FROM;
close TO;
print "\n";
print "Datei samba-liste.txt gesichert!\n";
# 3. Schritt - Ergebnis.txt in Hash einlesen.
open (ERG,'ergebnis.txt') || die "Kann DAtei nicht öffenen";
while (<ERG>)
{
chomp;
next if ($_=~ /\'/);
($key,$null) = split (/\s/);
$MA{$key}=$null;
}
close (ERG);
# 4. Schritt In der IVS.txt Zeichenersetzung von Hash $MA{$values} durch sich selbst und mit einem # am Zeilenanfang
open (LESEN, '<IVS.txt');
@zeilen = <LESEN>;
close LESEN;
foreach $ma (keys %MA)
{
foreach $zeile (@zeilen)
{
if ($_ eq $ma)
{
$zeile =~ s/$ma/X $ma /;
}
}
}
print "@zeilen";
Datum: 17.11.2005-15:50
