Thread Programmierungshilfe für PERL (9 answers)
Opened by asakalli at 2010-07-16 13:32

topeg
 2010-07-17 18:44
#139875 #139875
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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
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
07/17/2010 02:15:46| main|node105|W|job 56494 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node105|W|job 86723 exceeds job hard limit "h_vmem" of queue

07/17/2010 02:15:46| main|node105|W|job 90235 exceeds job hard limit "h_vmem" of queue



07/17/2010 02:15:46| main|node105|W|job 42634 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node713|W|job 56494 exceeds job hard limit "h_vmem" of queue



07/17/2010 02:15:46| main|node892|W|job 86723 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node564|W|job 90235 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node672|W|job 42634 exceeds job hard limit "h_vmem" of queue




07/17/2010 02:15:46| main|node672|W|job 68623 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node672|W|job 73833 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node672|W|job 67525 exceeds job hard limit "h_vmem" of queue
07/17/2010 02:15:46| main|node672|W|job 54789 exceeds job hard limit "h_vmem" of queue




07/17/2010 02:15:46| main|node672|W|job 46538 exceeds job hard limit "h_vmem" of queue


Ausgabe:
Code: (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
$VAR1 = {
'564' => {
'90235' => 'job hard limit "h_vmem" of queue'
},
'892' => {
'86723' => 'job hard limit "h_vmem" of queue'
},
'713' => {
'56494' => 'job hard limit "h_vmem" of queue'
},
'672' => {
'67525' => 'job hard limit "h_vmem" of queue',
'54789' => 'job hard limit "h_vmem" of queue',
'73833' => 'job hard limit "h_vmem" of queue',
'68623' => 'job hard limit "h_vmem" of queue',
'42634' => 'job hard limit "h_vmem" of queue',
'46538' => 'job hard limit "h_vmem" of queue'
},
'105' => {
'90235' => 'job hard limit "h_vmem" of queue',
'56494' => 'job hard limit "h_vmem" of queue',
'42634' => 'job hard limit "h_vmem" of queue',
'86723' => 'job hard limit "h_vmem" of queue'
}
};


Edit: Kopierfehler beseitigt...
Last edited: 2010-07-17 19:00:46 +0200 (CEST)

View full thread Programmierungshilfe für PERL