Leser: 20
1 2 3
for($i=0;$i<100;++$i){ $node[$i]=`grep -r "exceed" /ver1/ver2/ver3/node* | awk '{printf(\$3);printf(\$4)}` | tr '\|' ' ' | awk '{printf(\$2)}'`; }
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
use Data::Dumper; my @node; for my $file (glob('/ver1/ver2/ver3/node*')) { push(@node,[]); if(open(my $fh, '<', $file)) { while(my $line=<$fh>) { if($line=~/exceed/) { my $data=join('',(split(/\s+/,$line))[3,4]); $data=~y/|/ /; $data=(split(/\s+/,$line))[2]; push(@{$node[-1]},$data); } } close($fh); } else { warn("ERROR open $file ($!)\n"); } } print Dumper(\@node);
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
#!/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/'; # 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('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);
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);
my @col=split('\|', $line);
for my $file (glob("$dir\/messages"))
for my $file (glob("$dir/messages"))
1 2 3 4 5 6 7 8 9
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 } };
$VAR1 = {};
if(index($line,'exceed')>-1)
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);
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
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'
}
};