Sziasztok!
A következőbe kérném segítségeteket: Lenne egy elég nagy log fileom (~350 MB átlagba a mérete), jellemzően ip címek vannak benne. Azt szeretném vele csinálni, hogy kiválogatni csak az ip címeket, megszámolni melyik cím hányszor fordul elő, s a 10 legtöbb sorral rendelkező ip címet sorrendbe (a legtöbb sorral rendelkező ip címet az első helyre s így tovább) egy fileba írni.
Tudtok ti erre valami kész megoldást, vagy mindenképp valami scriptet kell rá majd faragnom. Ha igen odáig elméletbe eljutottam, hogy mondjuk regexpes awk-val kiszedem az ip címeket, de ez után rögtök el is akadtam, hogy hogy fogom megszámolni melyik címből mennyi van, ezután meg gondolom sort-al sorrendbe lehetne állítani.
Segítségeteket előre is köszönöm!
- 1340 megtekintés
Hozzászólások
sed -n 's%.* src=\(192.168.[0-9.]*\).*%\1%p' /proc/net/ip_conntrack | sort |awk '{ip[$1] = ++ip[$1]}; END{for (e in ip) {print e, " : ", ip[e] }}'
Igaz ez tomatora szántam és a belső kapcsolatokat számolja meg, de kiindulási alapnak jó lesz
- A hozzászóláshoz be kell jelentkezni
grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" LOG | sort | uniq -c | sort -r | head
nyilván a regexpet a feladathoz lehet (nem hiszem hogy kellene) igazítani de az awk egy kicsit erősnek tűnt :) mármint úgy hogy ez első sortot ami igen erőforrásigényes nem váltod ki vele
- A hozzászóláshoz be kell jelentkezni
valamiért anno így csináltam
A tomato fw -ben nincs uniq :(
És akkor már meg is van miért volt jó ez az awk
Igaz esetében elküldve a susnyásba....
de jó pap holtig tanul :)
- A hozzászóláshoz be kell jelentkezni
Remek alkalom, hogy megtanulj programozni :-). Beteszed egy map-be az IP-ket, és hozzájuk rendelsz egy számlálót, amit növelsz minden előforduláskor. Ha felépült, akkor kiveszed az IP cím-előfordulás párokat, előfordulás szerint rendezed őket, majd kiírod a kimenetre.
Ha nem tudnék programozni, akkor betenném az IP címeket egy adatbázis táblába (erre tuti van 1000 találat, hogy hogyan kell), majd egy ilyesmi kéréssel lekérném a számosságok szerint rendezve:
http://blog.sqlauthority.com/2007/07/11/sql-server-count-duplicate-reco…
- A hozzászóláshoz be kell jelentkezni
Köszönöm a hozzászólásokat! Kipróbálom majd a tippeket! :)
- A hozzászóláshoz be kell jelentkezni
subscribe
színes aláírás
- A hozzászóláshoz be kell jelentkezni
Én is festek egyet ezen a biciklitárolón:
perl -ne'/(\d+\.\d+\.\d+\.\d+)/;$h{$1}++}{print "$_\t$h{$_}\n" for (sort {$h{$b} <=> $h{$a}} keys %h)[0..9]' path/to/logfile > eredmeny
- A hozzászóláshoz be kell jelentkezni
#!perl
use 5.010;
use strict;
use warnings;
use Regexp::Common qw/ net /;
my %addr;
while ( my $line = <ARGV> ) {
$addr{$_}++ for ( $line =~ /$RE{net}{IPv4}/g );
}
say join $/, grep defined,
( reverse sort { $addr{$a} <=> $addr{$b} } keys %addr )[ 0 .. 9 ];
reverse kell!
- A hozzászóláshoz be kell jelentkezni
Nem kell reverse, a sort összehasonlító függvényének { $addr{$b} <=> $addr{$a} }-re cserélése ugyanazt a hatást éri el.
- A hozzászóláshoz be kell jelentkezni
igaz, elnezest
- A hozzászóláshoz be kell jelentkezni