Schrift
[thread]11255[/thread]

Parsen in Perl?



<< >> 7 Einträge, 1 Seite
Gast Gast
 2008-02-06 15:44
#105639 #105639
Hallo,
wie würdet ihr folgendes lösen:
Von einem Tool kommt eine Ausgabe:

class htb 1:11 parent 1:1 prio 0 quantum 13107 rate 1Mbit ceil 1Mbit burst 2909b/8 mpu 0b cburst 2909b/8 mpu 0b level 0
Sent 254574739 bytes 2188533 pkts (dropped 0, overlimits 0)
rate 10587bps 105pps
lended: 2188533 borrowed: 0 giants: 0
tokens: 22234 ctokens: 22234

class htb 1:1 root rate 1500Kbit ceil 1500Kbit burst 3519b/8 mpu 0b cburst 3519b/8 mpu 0b level 7
Sent 595611979 bytes 3444145 pkts (dropped 0, overlimits 0)
rate 16492bps 161pps
lended: 14857 borrowed: 0 giants: 0
tokens: 18432 ctokens: 18432

...

Aus jedem Block der mit "class" beginnt, brauche ich die beiden darauf folgenden Werte (hier: htb 1:1 ; htb 1:11) dann den Zahlenwert für "Sent" und die Werte für "dropped" und "overlimits" in einer Zeile, um diese Daten später weiterverarbeiten zu können.
Die genannten Possitionen existieren immer, aber der rest kann sich ändern.
renee
 2008-02-06 16:00
#105641 #105641
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;

my $file = 'ausgabedatei_des_tools.txt';

{
  open my $fh, '<', $file or die $!;
  local $/,"\n\n";
  while( my $entry = <$fh> ){
    my ($htb) = $entry =~ /(htb\s*\d+\.\d+)/;
    print $htb,"\n";
  }
}
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/
Linuxer
 2008-02-06 16:12
#105642 #105642
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Zeile 10 sollte korrigiert werden:

Aus
Code: (dl )
  local $/,"\n\n"; 

sollte
Code (perl): (dl )
    local $/ = "\n\n"; 

werden, oder?
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!
renee
 2008-02-06 16:19
#105643 #105643
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, zu schnell getippt...
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/
Gast Gast
 2008-02-06 16:27
#105644 #105644
Erst einmal danke für die Ideen.

Hab micht vielleicht etwas blöd ausgedrückt, aber htb ist kein fixer wert, der kann sich ändern.
Die 4 oder 5 Werte aus dem Block sollen eben in eine Zeile geparsed werden.
Linuxer
 2008-02-06 17:10
#105648 #105648
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Schnellschuß:

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
#!/usr/bin/perl
use strict;
use warnings;

{
        local $/ = "\n\n";

        while ( my $block = <DATA> ) {
                if ( $block =~ m/class\s+(\S+\s\S+).+(Sent\s\d+).*(dropped\s\d+),\s+(overlimits\s\d+)/ms ) {
                        print "$1 $2 $3 $4", $/;
                }
        }
}


__DATA__
class htb 1:11 parent 1:1 prio 0 quantum 13107 rate 1Mbit ceil 1Mbit burst 2909b/8 mpu 0b cburst 2909b/8 mpu 0b level 0
Sent 254574739 bytes 2188533 pkts (dropped 0, overlimits 0)
rate 10587bps 105pps
lended: 2188533 borrowed: 0 giants: 0
tokens: 22234 ctokens: 22234

class htb 1:1 root rate 1500Kbit ceil 1500Kbit burst 3519b/8 mpu 0b cburst 3519b/8 mpu 0b level 7
Sent 595611979 bytes 3444145 pkts (dropped 0, overlimits 0)
rate 16492bps 161pps
lended: 14857 borrowed: 0 giants: 0
tokens: 18432 ctokens: 18432
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!
Gast Gast
 2008-02-06 17:15
#105649 #105649
Super, Danke!
<< >> 7 Einträge, 1 Seite



View all threads created 2008-02-06 15:44.