Thema: Wie macht mans am besten?

Moin.

Also ich versuch mich gerade an nem logparser für meine firewall logs. Nun wollt ich auch dir zugriffsversuche auf die ports anzeigen lassen. Die zugriffe auf nen port zu zählen ist nicht das prob. Ich wollte es zunächst so machen, ein array zu haben namens @ports, und dann, wenn auf einen port zugegriffen worden ist (versucht wurde) wollte ich einfach $ports[$portnr]++; machen. Das würde sicherlich auch funzen, wenn ich nur wüsste, wie ich die so gewonnenen werte absteigend sortieren lassen kann? Wenn ich nur nach den werten der dann immerhin über 65000 elementen sortiere, so habe ich ein problem. Bsp:

$ports[22] hat den wert 2132, das wäre der höchste wert. Nun sortiere ich und danach hätte $ports[0] den wert 2132, also alles umsonst gewesen. Wie löst man das am besten?

thx F.

GPG key 2E1B4257

2

Re: Wie macht mans am besten?

Warum arbeitest Du nicht mit einem Hash?
Portnummer -> Anzahl

Lä�t sich nach allem ganz leicht sortieren und verwalten. Oder hab ich da was falsch verstanden?
Hier ein Link dazu:
-Hashes
http://www.mathe2.uni-bayreuth.de/perl/ … Operatoren

-Sortieren allgemein
http://www.mathe2.uni-bayreuth.de/perl/EP/sort.htm

Ich hatte mal was zum Wörterzählen geschrieben. das Prinzip sollte ja das selbe sein. Hier ein paar relevante Codeschnipsel:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> 
while ($string=~/b(w+)b/g)
       {
        $word{U$1}++;#U wandelt alles in GroÃ?buchstaben um - keine Unterscheidung mehr
        push(@array,$1);
       }
foreach $bez(sort(keys(%word)))
{
         print $bez." : ".$word{$bez}."n";
}[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Sortieren lassen kann man hier ja nach keys, oder values. Man hat also die Wahl der Qual     <img border="0" title="" alt="[Lächeln]" src="images/icons/smile.gif" />   
Hoffe, das war, was Du gesucht hattest, ansonsten melde Dich nochmal.
Ach ja, mit Arrays ging es irgendwie so:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> 
@gerade=sort {$a<=>$b} (@gerade); #sortiert die Zahlen der Grö�e nach.[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">MfG Mirko
 
  <small>[ 27-03-2002, 00:43: Beitrag editiert von: .: Mirko :. ]</small>

Wer einen Rechtschreibfehler findet darf ihn behalten.

3

Re: Wie macht mans am besten?

hmm, also wenn ich ein "normales" Array hätte (also ich meine eins, das mit @ anfängt  <img border="0" title="" alt="[Winken]" src="images/icons/wink.gif" /> ), dann würde ich es ja hinbekommen. Also so wie dus da gepostet hast. NUr leider habe ich ein Assoziatives Array. Und da bekomme ich es net hin, ohne die values den falschen keys wieder zuzuordnen  <img border="0" title="" alt="[Enttäscht]" src="images/icons/frown.gif" />

so what?

F.

GPG key 2E1B4257

4

Re: Wie macht mans am besten?

Ich weiß nun nicht, ob's so am besten ist --
aber vielleicht hilft's Dir ja weiter:

%H=qw(a 219 b 26 c 35 d 402 e 151 f 66 g 780 h 189 i 96 j 101 k 15 l 12);

%R=reverse %H;

foreach $i(sort {$a<=>$b} keys %R){print $i.' - '.$R{$i}.'n';};

mit österlichem gruß

matho

5

Re: Wie macht mans am besten?

@matho: thx. das hab ich mitlerweile zwar auhc schon gefunden gehabt, aber es funzt einfach net, wie es soll *argh*
Ich hab zum testen folgendes script geschrieben:
  </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> #!/usr/bin/perl

%ar=(
"feld172","5539",
"feld145","2329",
"feld13","2329",
"feld162","23429",
"feld31","4529",
"feld41","239",
"feld15","223434",
"feld122","223"
);

foreach $key (sort { $ar{$b} <=> $ar{$a} } %ar) {
         print $key."=>".$ar{$key}."n";
} [/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">und als ausgabe kommt da nun:
  </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> feld15=>223434
feld162=>23429
feld172=>5539
feld31=>4529
feld13=>2329
feld145=>2329
feld41=>239
feld122=>223
5539=>
2329=>
2329=>
223=>
239=>
23429=>
223434=>
4529=> [/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">warum werden da am ende nochmal alle wete mit ausgegeben (halt als key???)

...kurz vorm verzweifeln, F.  <img border="0" title="" alt="[Winken]" src="images/icons/wink.gif" />

GPG key 2E1B4257

6

Re: Wie macht mans am besten?

An sonem schönen Tag verzweifeln wär eindeutig contraindiziert hund unschön:

%ar=qw(feld172 5539 feld145 2329 feld13 2329 feld162 23429
        feld31 4529 feld41 239 feld15 223434 feld122 223
        );
foreach $key(sort{$ar{$b}<=>$ar{$a}}keys %ar)
{print $key.'=>'.$ar{$key}.'n';};

gruß

matho

7

Re: Wie macht mans am besten?

ok, scheint nun zu funzen.
Ich hab scheinbar nur das keys vor dem %ar vergessen...
besten dank auch.

F.

GPG key 2E1B4257