Thread Programmierungshilfe für PERL
(9 answers)
Opened by asakalli at 2010-07-16 13:32
Ich hatte noch einen Dreher in Zeile 27.
Richtig ist: Code (perl): (dl
)
if(index($line,'exceed')>-1) Hier der Code der bei mir funktioniert. Ich habe noch eine Abfrage, ob auch alle Daten gefunden wurden hinzugefügt. 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 54 55 56 57 58 59 60 61 62 #!/usr/bin/perl 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*/messages'; # in 7. Verzeichniss gibt es 80 Verzeichnisse die folgendes heißen node001 bis node040, und node101 bis node140 # in jedem node Verzeichnis gibt es eine Messages datei. und genau diese Datei soll gelesen werden. # Jobs zu den Nodes in einem Hash speichern my %node; # alle Dateien im Verzeihnis durch gehen for my $file (glob($dir)) { # 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($line,'exceed')>-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 (.+)$/; # wenn alle Daten tatsächlich gefunden wurden: if(defined($nodeid) and defined($jobid)) { $message='' unless($message); # 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); TestDaten: Code: (dl
)
1 07/17/2010 02:15:46| main|node105|W|job 56494 exceeds job hard limit "h_vmem" of queue Ausgabe: Code: (dl
)
1 $VAR1 = { Edit: Kopierfehler beseitigt... Last edited: 2010-07-17 19:00:46 +0200 (CEST) |