Hallo Zusammen!
Ich habe folgendes Problem:
Ich habe eine Konfigurationsdatei von einem Router, bei der sich gewisse Teile nicht verändern dürfen.
Mit Hilfe eines Perl-Scripts wollte ich prüfen, ob diese Teile in einer aktuellen Konfiguration wirklich nicht verändert sind.
Meine Idee war, dass ich mir eine bereinigte Konfiguration nehme, in der nur die Zeilen stehen, die auch vorhanden sein müssen. Ich gleiche dann jede Zeile einer neuen (kompletten) Konfioguration mit jeder Zeile der bereinigten Konfiguration ab.
Wenn sich zwei Zeilen gleichen, wird diese identische Zeile in ein Tempfile geschrieben.
Dementsprechend sollte sich im tempfile nach dem Durchlauf der selbe Inhalt wie in der bereinigten Konfiguration befinden, vorausgesetzt die neue Konfiguration beinhaltet alle nötigen Zeilen.
Um zu verdeutlichen, wie das funktionieren soll, hier ein Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
##############
# new_conf
albert
peter
johann
rolf
karin
steffen
##############
# bereinigt
albert
peter
karin
##############
# tempfile
albert (in beiden vorhanden)
peter (in beiden vorhanden)
karin (in beiden vorhanden)
Um dies zu überprüfen führe ich einen diff aus. Leider ergibt sich das Problem, dass gewisse Teile doppelt im tempfile stehen. Somit gleichen sich tempfile und bereinigte Konfiguration nicht, obwohl die zu prüfende Konfiguration in Ordnung ist.
Das tempfile sieht dann so aus:
###############
# tempfile
albert
peter
peter
karin
karin
Ich habe keine Ahnung, was ich dagegen tun kann, weiß hier jemand abhilfe?
Im Anschluss noch mein Code:
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
#!/usr/bin/perl
open(GOODFILE,"<good.txt");
@GOOD_LINES = <GOODFILE>;
close(GOODFILE);
open(CHECKFILE,"<check.txt");
@CHECKLINES = <CHECKFILE>;
close(CHECKFILE);
chomp(@GOOD_LINES);
chomp(@CHECKLINES);
foreach $GOODLINE (@GOOD_LINES) {
foreach $CHECKLINE (@CHECKLINES) {
if ( $GOODLINE eq $CHECKLINE ) {
open (TEMPFILE, '>>temp.txt');
print TEMPFILE $GOODLINE."\n";
close (TEMPFILE);
}
}
}
system("/usr/bin/diff /good.txt /temp.txt > /dev/null");
if ( $? == 0 ) {
print "Config OK!"."\n";
}
else {
print "Config nicht OK!"."\n";
}
Dank und Gruß
Marcus
edit pq: code-tags hinzugefügt