Thread Programmierungshilfe für PERL
(9 answers)
Opened by asakalli at 2010-07-16 13:32
@topec,
vielen vielen Dank. Genau, du hast es richtig Verstanden. Es kann mal verschiedene Jobs in gleichen Node vorkommen. Aber gleiche Job kann sehr sehr selten auf mehrere Node vorkommen. Der letzte Skript von dir ist genau was ich mir vorstelle. ICh habe ihn eingebaut und laufen gelassen. Er spukt mir folgende Fehler aus Use of uninitialized value in pattern match (m//) at ./perlscript_for.pl line 33, <$fh> line 2. Use of uninitialized value in pattern match (m//) at ./perlscript_for.pl line 35, <$fh> line 2. Use of uninitialized value in pattern match (m//) at ./perlscript_for.pl line 37, <$fh> line 2. Use of uninitialized value in hash element at ./perlscript_for.pl line 39, <$fh> line 2. Use of uninitialized value in hash element at ./perlscript_for.pl line 39, <$fh> line 2. $VAR1 = { '' => { '' => undef } }; ich habe folgendes das Skript ein wenig geändert. Code (perl): (dl
)
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 42 43 44 45 46 47 48 49 50 51 52 53 use strict; use warnings; # das Modul Data::Dumper laden # exportiert die Funktion "Dumper" use Data::Dumper; # Verzeichnis in dem gesucht werden soll my $dir='/ver1/ver2/ver3/ver4/ver5/ver6/ver7/node*'; #in 7. Verzeichniss gibt es 80 Verzeichnisse die folgendes heißen node001 bis node040, und node101 bis node140 # Jobs zu den Nodes in einem Hash speichern my %node; # alle Dateien im Verzeihnis durch gehen for my $file (glob("$dir\/messages")) # in jedem node Verzeichnis gibt es eine Messages datei. und genau diese Datei soll gelesen werden. Ich hoffe dass ich hier so richtig gemacht habe. { # Datei öffnen und prüfen ob es funktioniert hat if(open(my $fh, '<', $file)) { # Datei Zeilenweise durch gehen while(my $line=<$fh>) { chomp($line); ## Wenn eine Zeile "node" mit einer Nummer und Job mit einer Nummer zusammen mit "exeeds" auftaucht, ## Dann die NodeID und JobID zusammen mit der Meldung speichern. #$node{$1}{$2}=$3 if($line=~/node(\d+).*?job (\d+) exceeds (.+)$/); # das kann man auch anders schreiben: if(index('exceed',$line)>-1) { # zeile an den "|" spliten my @col=split('|', $line); # nodeid ermitteln my ($nodeid)=$col[2]=~/(\d+)/; # jobid ermitteln my ($jobid)=$col[4]=~/job\s*(\d+)/; # message ermitteln my ($message)=$col[4]=~/exceeds (.+)$/; # alles zusammen speichern $node{$nodeid}{$jobid}=$message; } } # Datei schließen close($fh); } else { # waren wenn das Öffnen der Datei fehlschlug warn("ERROR open $file ($!)\n"); } } # Mit Dumper kann man Datenstrukturen formatiert ausgeben lassen. # das ist ganz nützlich um zu sehen was man überhaupt an Daten hat. print Dumper(\%node); Noch mal tausend Dank für deine Hilfe. |