Utiliser des variable pour générer des tableau et utiliser des variables pour appeler les tableau.
Bonjour a tous,
Que pensez vous de ce code pour arriver à mon but?
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #!/bin/bash
###################################
##
## Parse les fichiers de log présent dans $logdir.
## Résultat : deux tableaux par fichier,
## _hits contenant le nombre d'occurrence d'IP
## _IP tableau des IPs!
##
###################################
logdir="/var/log/apache2/"
## Pour chaques fichiers access de la semaine précédente
for logfile in ${logdir}access_*.1
do
echo "### Traitement du fichier $logfile ###";
tabname=`echo "$logfile" | cut -d'.' -f1 | cut -c 25-`;
switch=1;
current=0;
## Récupérer les IPs, les trier puis en garder une de chaque précédé du nombre d'occurences
for line in `awk '{print $1}' $logfile | sort | uniq -c`
do
## Pour le nombre d'occurences, l'ajouter au tableau _hits du fichier en cours.
if [ $switch -eq 1 ]; then
temp=${tabname}_hits;
eval $temp[$current]=$line;
## DEBUG : Test de l'enregistrement.
echo $temp[$current] vaut ${!temp[$current]};
((switch++));
## Stocker chaque IP, sur la ligne de même index que son occurence,
## dans le tableau _IP du fichier en cours.
else
temp=${tabname}_ip;
eval $temp[$current]=$line;
## DEBUG : Test de l'enregistrement.
echo $temp[$current] vaut ${!temp[$current]};
((switch--));
((current++));
fi
done
done |
Lorsque je lance mon code, les echo de contrôle ne s'affiche correctement que pour la première ligne de mes tableau.
Le but est de faire des comparaisons ensuite avec d'autres logs et de m'envoyer un mail sur certains triggers a venir.
Mais pour l'instant j'en suis là! :roll:
Est-ce une méthode viable?
Certes plein de logiciels font ce genre de travail d'analyse de logs, comme par exemple AWStats.
Je ne veux pas alourdir mon Raspberry qui est déjà bien occupé (ancien modèle avec moitié moins de RAM :aie:)
Et surtout, mon but est de m'entrainer.
Merci d'avance pour vos retours.