[gull] Filtrage d'unicité avec comptage d'apparition
Félix Hauri
felix at f-hauri.ch
Thu Mar 10 00:02:18 CET 2011
Bonjour,
On Wed, Mar 09, 2011 at 11:44:40AM +0100, Yves Martin wrote:
> ... traiter des logs ...
> grep | cut | sort -u
>
> Mais j'aimerai sortir un comptage d'apparition des adresses IP extraites.
Ce serait assez une question ``d'école'' façon ``épreuve'', mais
avec un ``petit piège'' et le premier gagnant est *magnus*!
On Wed, Mar 09, 2011 at 02:39:41PM +0100, Daniel Cordey wrote:
> On Wednesday 09 March 2011 14:18:59 magnus wrote:
>
> > euh, "... | sort | uniq -c" aurait été un peu plus lisible non?
>
> Evidemment ! A force d'utiliser 'sort -u', la commande 'uniq' est un peu sorti
> de mes pensees :-)
La bonne réponse était effectivement de NE PAS ``-u'' dans sort afin
de pouvoir ``uniq -c''.
Et pourquoi pas, pour passer directement des logs vers gnuplot,
en utilisant sed plutôt que grep, avec quelque chose comme:
(Nota dans le cas présent, les dates sont encapsulées entres crochets.
je veux compter le nombre de hits par minutes et l'adresse IP que
je recherche est entre des espaces.)
``[]'' .
sed < mylog -ne "s/^\[\([^]]*\):[0-9][0-9]\].* 192.168.2.1 .*$/\1:00/p" |
date -uf - "%s" |
uniq -c >mylog.dat
Ou egallement:
sed < mylog -ne "s/^\[\([^]]*\)\].*\$/\1/" |
date -uf - +%s/60*60 |
bc |
uniq -c >mylog.dat
Cette deuxième méthode présente l'avantage de permettre de modifier
la résolution de manière fine (/10 secondes, /30 minutes, etc...)
Voici le fichier de commandes gnuplot minimum:
------- mylog.plot --------
set terminal postscript enhanced color
set xdata time
set format x "%a\n%d/%m\n%H:%M"
set timefmt "%s"
plot "mylog.dat" using 2:1 title "IP 192.168.2.1 /minutes" with impulse
------- mylog.plot --------
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list