Hallo Forum!
Ich habe folgendes Problem.
In einer Datei gibt es tausende Zeilen, die so aufgebaut sind
Gelegentlich kommen Pings doppelt vor (ein Fehler, den wir derzeit suchen!).
Ich will nun alle Zeilen mit icmp filtern und die doppelten Eintraege heraussuchen.
Sobald ich einen doppelten Eintrag gefunden habe, will ich das Datum, das eine Zeile weiter steht, mitausgeben!
Wie ich den doppelten Eintrag finden kann, das habe ich schon herausen, wie ich die naechste Zeile, also das Datum mitnehmen kann, bekomme ich nicht hin!
So sieht das Modul fuer den doppelten Eintrag aus
Fuer das Problem mit der naechsten Zeile ergibt sich jedoch immer folgende Fehlermeldung, obwohl ich es schon versucht habe mit casten!
Hier der Code des Moduls, wo das casten nicht richtig funktioniert?!?!
Wenn mir jemand vll. weiterhelfen koennte, wo im letzten Modul der Fehler genau liegt.
bzw. wie ich den Code veraendern muss, damit es funktioniert!
Danke Euch schon im voraus vielmals!
Ich habe folgendes Problem.
In einer Datei gibt es tausende Zeilen, die so aufgebaut sind
Code:
64 bytes from orc2 (10.117.230.122): icmp_seq=0. time=1.05 ms
15.12_15:03:51
64 bytes from orc2 (10.117.230.122): icmp_seq=1. time=0.428 ms
15.12_15:03:52
64 bytes from orc2 (10.117.230.122): icmp_seq=2. time=0.528 ms
15.12_15:03:53
64 bytes from orc2 (10.117.230.122): icmp_seq=3. time=0.475 ms
64 bytes from orc2 (10.117.230.122): icmp_seq=3. time=0.475 ms
15.12_15:03:54
Gelegentlich kommen Pings doppelt vor (ein Fehler, den wir derzeit suchen!).
Ich will nun alle Zeilen mit icmp filtern und die doppelten Eintraege heraussuchen.
Sobald ich einen doppelten Eintrag gefunden habe, will ich das Datum, das eine Zeile weiter steht, mitausgeben!
Wie ich den doppelten Eintrag finden kann, das habe ich schon herausen, wie ich die naechste Zeile, also das Datum mitnehmen kann, bekomme ich nicht hin!
So sieht das Modul fuer den doppelten Eintrag aus
Code:
#!/bin/perl -w
@b=();
open(IN,"</tmp/pingorc2.log");
while ($line = <IN>) {
if ($line =~ /icmp/) {
@a=split("=",$line);
push(@b, "$a[1]");
}
}
close IN;
foreach my $key (@b) {
$HASH{$key}++ ;
}
open(IN,">/sequenznummer.txt");
foreach my $key (keys %HASH) {
print IN "$key: \n" if ($HASH{$key}>1) ;
}
close IN;
open(IN,"</sequenznummer.txt");
while ($line = <IN>) {
if ($line =~ /time/) {
@a=split(/\./,$line);
push(@x, "$a[0]");
}
}
close IN;
foreach (@x){
print "$_\n";
}
Fuer das Problem mit der naechsten Zeile ergibt sich jedoch immer folgende Fehlermeldung, obwohl ich es schon versucht habe mit casten!
Code:
Use of uninitialized value in pattern match (m//) at ./seq.pl line 16, <$fh> line 128624.
Argument "15.12_15:10:17" isn't numeric in int at ./seq.pl line 15, <$fh> line 128626.
Hier der Code des Moduls, wo das casten nicht richtig funktioniert?!?!
Code:
#!/bin/perl -w
use Tie::File;
my $filename = '/tmp/pingorc2.log';
tie my @aapl, 'Tie::File', $filename or die "Can't tie '$filename' $!";
#for my $i (0..$#aapl) {
$anzahl = $#aapl;
for ($i=0; $i<=$anzahl; $i++) {
if ( $aapl[$i] =~ /icmp/ ) {
my $price = $1;
$string = $aapl[$i + 11];
$appl = int($string);
if ($aapl =~ /\d*.\d*/) {
$id = $1;
print "$id\n";
}
}
}
Wenn mir jemand vll. weiterhelfen koennte, wo im letzten Modul der Fehler genau liegt.
bzw. wie ich den Code veraendern muss, damit es funktioniert!
Danke Euch schon im voraus vielmals!