|
| Log-file parsing Fra : Thomas Axelsen |
Dato : 21-06-01 21:22 |
|
Hej - Total nybegynder søger hjælp! Har 2 spg.
1.
Har en tekststreng der ser sådan ca. sådan her ud:
tekst1 | tekst2 | tekst3
og jeg vil gerne have den til at at se ud som følger:
tekst1:tekst2:tekst3
Har forsøgt med
foreach(@newarray) {
s/[\| \s+]/:/g; }
men det er ikke helt iorden da alle \s og \| erstattes med : - er der nogen
måde at erstatte x-antal tegn med et enkelt tegn på??
2.
Ovennævnte tekststreng (ip:sendt:modtaget) skal "fyldes" på rrdtool således
at der er "kobling" mellem de respektive ip-numre og sendt/modtaget - kan
man bruges hashes til det? eller "multidimensionelle arrays"?
På forhånd tak
Thomas Axelsen
| |
Lars Balker Rasmusse~ (21-06-2001)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 21-06-01 21:45 |
|
"Thomas Axelsen" <t.axelsen@get2net.dk> writes:
> Har en tekststreng der ser sådan ca. sådan her ud:
> tekst1 | tekst2 | tekst3
> og jeg vil gerne have den til at at se ud som følger:
> tekst1:tekst2:tekst3
>
> Har forsøgt med
> foreach(@newarray) {
> s/[\| \s+]/:/g; }
> men det er ikke helt iorden da alle \s og \| erstattes med : - er der nogen
> måde at erstatte x-antal tegn med et enkelt tegn på??
Du har placeret + forkert: s/[|\s]+/:/g;
> Ovennævnte tekststreng (ip:sendt:modtaget) skal "fyldes" på rrdtool således
> at der er "kobling" mellem de respektive ip-numre og sendt/modtaget - kan
> man bruges hashes til det? eller "multidimensionelle arrays"?
Ja, men du bliver nødt til at uddybe dit spørgsmål.
--
Lars Balker Rasmussen "Woo hoo!?"
| |
Thomas Axelsen (21-06-2001)
| Kommentar Fra : Thomas Axelsen |
Dato : 21-06-01 22:04 |
|
Hej igen og tak for hjælpen med nr. 1
> > Ovennævnte tekststreng (ip:sendt:modtaget) skal "fyldes" på rrdtool
således
> > at der er "kobling" mellem de respektive ip-numre og sendt/modtaget -
kan
> > man bruges hashes til det? eller "multidimensionelle arrays"?
>
> Ja, men du bliver nødt til at uddybe dit spørgsmål.
Jeg prøver at præcisere:
$ipdata skal have en form hvor der er kobling mellem ipnummer og
sendte/modtagne data eg.:
(ip1,sendt1,modt1)
(ip2,sendt2,modt2)
osv.
eller
ip1 --> (sendt1,modt1)
osv.
Dataene kommer i et array med tekststrenge som kan splittes i scalars eller
til et array
Endemålet er, at fylde dataene på:
RRDs::update $rrd, "$ipdata";
if ($ERROR = RRDs::error) {
die "$0: unable to update `$rrd': $ERROR\n";
};
hvor $ipdata har formen; N:sendt1:modt1:sendt2:modt2:osv.
| |
Lars Balker Rasmusse~ (21-06-2001)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 21-06-01 22:50 |
|
"Thomas Axelsen" <t.axelsen@get2net.dk> writes:
> Jeg prøver at præcisere:
>
> $ipdata skal have en form hvor der er kobling mellem ipnummer og
> sendte/modtagne data eg.:
> (ip1,sendt1,modt1)
> (ip2,sendt2,modt2)
> osv.
>
> eller
> ip1 --> (sendt1,modt1)
> osv.
>
> Dataene kommer i et array med tekststrenge som kan splittes i scalars eller
> til et array
>
> Endemålet er, at fylde dataene på:
> RRDs::update $rrd, "$ipdata";
> if ($ERROR = RRDs::error) {
> die "$0: unable to update `$rrd': $ERROR\n";
> };
> hvor $ipdata har formen; N:sendt1:modt1:sendt2:modt2:osv.
Det nemmeste er nok at lave en hash over IP-adresser, som så
indeholder en streng der er lige til at fylde på RRDs::update:
%ipdata = ();
foreach (@newarray) {
s/[|\s]+/:/g;
($ip, $sendt, $modtaget) = split /:/;
$ipdata{$ip} = $ip unless defined $ipdata{$ip};
$ipdata{$ip} .= ":$sendt:$modtaget";
}
Så kan du bagefter løbe igennem hashen:
foreach $ip (sort keys %ipdata) {
RRDs::update $rrd, $ipdata{$ip};
if ($ERROR = RRDs::error) {
die "$0: unable to update `$rrd': $ERROR\n";
}
}
--
Lars Balker Rasmussen "Woo hoo!?"
| |
Thomas Axelsen (22-06-2001)
| Kommentar Fra : Thomas Axelsen |
Dato : 22-06-01 13:35 |
|
Tusind tak - det ligner lige det jeg skal bruge
> Det nemmeste er nok at lave en hash over IP-adresser, som så
> indeholder en streng der er lige til at fylde på RRDs::update:
>
> %ipdata = ();
> foreach (@newarray) {
> s/[|\s]+/:/g;
> ($ip, $sendt, $modtaget) = split /:/;
> $ipdata{$ip} = $ip unless defined $ipdata{$ip};
> $ipdata{$ip} .= ":$sendt:$modtaget";
> }
>
> Så kan du bagefter løbe igennem hashen:
>
> foreach $ip (sort keys %ipdata) {
> RRDs::update $rrd, $ipdata{$ip};
> if ($ERROR = RRDs::error) {
> die "$0: unable to update `$rrd': $ERROR\n";
> }
> }
> --
> Lars Balker Rasmussen "Woo
hoo!?"
Mvh
Thomas Axelsen
| |
Lars Kim Lund (21-06-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 21-06-01 21:53 |
|
Hej "Thomas Axelsen" <t.axelsen@get2net.dk>
>men det er ikke helt iorden da alle \s og \| erstattes med : - er der nogen
>måde at erstatte x-antal tegn med et enkelt tegn på??
$t = "tekst1 | tekst2 | tekst3\n";
print $t;
$t =~ s/[| ]{1,}/:/g;
print $t;
...
[LAKL@NOSTROMO, C:\]
# perl test.pl
tekst1 | tekst2 | tekst3
tekst1:tekst2:tekst3
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Balker Rasmusse~ (21-06-2001)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 21-06-01 22:00 |
|
Lars Kim Lund <larskim@mail.com> writes:
> $t =~ s/[| ]{1,}/:/g;
{1,} er en mere omstændelig måde at skrive + på. :)
--
Lars Balker Rasmussen "Woo hoo!?"
| |
Lars Kim Lund (21-06-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 21-06-01 22:11 |
|
Hej Lars Balker Rasmussen <lars@balker.org>
>> $t =~ s/[| ]{1,}/:/g;
>{1,} er en mere omstændelig måde at skrive + på. :)
Sålænge det bare virker som jeg forventer så er jeg glad. Og hold så
op med at drille. Dumme Lars.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
|
|