Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8754[/thread]

UNIX-Befehle "richtig" in perl anwenden: awk, grep, datum



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Duff
 2007-02-13 09:29
#74290 #74290
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

ich habe ein Logfile, dass ich analysieren möchte. Und zwar soll immer nur die letzte Stunde genommen werden und nicht das ganze Logfile.

Dies wollte ich mit awk '/075001/,/085001/' logfile realisieren. Zu Beginn des Logfiles steht nämlich in diesem Format die Uhrzeit (auf Shell-Ebene funktioniert das ganze auch wunderbar).

Mein Skript sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my $current = sprintf("%02d%02d%02d",$std, $min, $sek);                                                 
my $past = $current - 10000;
### Beide folgenden Varianten werfen den Fehler use of unintialized value ...
#$past = sprintf("0%05d", $past) if($past != /\d{6}/);
#$past = "0$past" if($past !=~ m/\d{6}/);
if($past =~ m/\d{6}/g) {
$past = $past;
}
else {
$past = "0$past";
}

@array=qx{awk '/^$past/,/^$current/'logfile|grep '<pattern>'};

...


Wie kann man das ganze eleganter lösen (vorallem auf die if-else Anweisung bezogen)?
Zudem habe ich das Gefühl, dass der awk in @array nicht jedes Mal korrekt ausgeführt wird, sondern nur manchmal.
D'OH
Daniel
renee
 2007-02-13 09:32
#74291 #74291
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
$past = sprintf("%06d",($current - 10000));
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2007-02-13 10:07
#74292 #74292
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Und dann brauche ich keine if-Anweisung mehr?

D.h., dass die Zahl immer 6 Stellen haben wird und dass bei nur 5 Stellen einfach eine 0 vorangestellt wird?

Kann ich den awk-Befehl denn so nutzen. Sprich, perl wertet die Variablen $past und $current richtig aus?

Ist die Datumsberechnung so in Ordnung oder gibt es dafür auch bessere, elegantere Varianten?

(Sorry, sind mal wieder ein paar mehr Fragen geworden ;-))
D'OH
Daniel
nepos
 2007-02-13 10:56
#74293 #74293
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wofür awk? Alles, was du damit machen kannst, kannst du auch gleich in Perl machen.
Duff
 2007-02-13 11:55
#74294 #74294
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Mit awk kann ich aber einem logfile, welches an jedem Zeilen Anfang die Uhrzeit stehen hat, einfach einen Zeitraum eingrenzen.

Wie würdest du denn ein awk '/<uhrzeit>/,/<uhrzeit-später>/' mit perl realisieren?
D'OH
Daniel
Linuxer
 2007-02-13 12:26
#74295 #74295
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Wie wäre es so?

Code: (dl )
1
2
3
4
5
while ( $line = <LOG> ) {
if ( $line =~ m/$startzeit/ .. $line =~ m/$endezeit/ ) {
# tu was
}
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Duff
 2007-02-13 13:32
#74296 #74296
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ja danke.

Wenn das so natürlich auch funktioniert, könnte man es auch so machen.

Was ist denn schneller, performanter?
D'OH
Daniel
docsnyder
 2007-02-13 14:05
#74297 #74297
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
oder so:
Code: (dl )
1
2
3
4
5
while ( <LOG> ) {
if ( /$startzeit/../$endezeit/ ) {
# tu was
}
}


;o)
Linuxer
 2007-02-13 14:36
#74298 #74298
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
[quote=Duff,13.02.2007, 12:32]Wenn das so natürlich auch funktioniert, könnte man es auch so machen.[/quote]
Das funktioniert.
Ich habe einige Skripte, die damit arbeiten.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Duff
 2007-02-13 15:12
#74299 #74299
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Werde es mal probieren.

Aber, was ist den eher zu empfehlen?
Vorallem, was ist performanter?

Das sind doch letztendlich die entscheidenen Kriterien, oder?
D'OH
Daniel
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-02-13 09:29.