push initial
This commit is contained in:
parent
28274e328a
commit
8290d2e459
5 changed files with 406 additions and 2 deletions
28
1analyse_new_logryzom.sh
Executable file
28
1analyse_new_logryzom.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
# Dernière révision : 2021/10/31
|
||||
# Auteur : Zatalyz. Merci à YannK, Tycho, Pulkomandy, Madi, Link Mauve et Glorf pour leurs nombreux conseils, les explications, l'aide et la patience !
|
||||
# Licence CC0
|
||||
# Ce script permet de ne garder que l'alentours et les emotes.
|
||||
# Système adapté au nouveau système de log (à la fois plus simple puisque pas besoin du syslog,
|
||||
# et un peu moins régulier dans les noms...)
|
||||
# Fonctionnement idéal : /usr/bin/bash ./1analyse_new_logryzom.sh fichier_entrée fichier_sortie
|
||||
# Par exemple :
|
||||
# ./1analyse_new_logryzom.sh log_zatalyz.txt log_zatalye_alentours.txt
|
||||
# On peut aussi renseigner les noms et chemins ici sur les variables :
|
||||
logfile1="$1"
|
||||
logsortie="$2"
|
||||
# Canaux à garder
|
||||
# Alentours + Endroit où on est
|
||||
grep 'SAY\|SHOUT\|SYSTEM\/ZON' "$logfile1" > templog.txt
|
||||
# vire le timestamp de début des lignes. Garde le * si ça peut servir à nettoyer le sys.info..
|
||||
cut -b 21- templog.txt > templog2.txt
|
||||
# Enlève les couleurs des canaux
|
||||
sed 's/@{[A-F0-9]\{4\}}//g' templog2.txt > templog3.txt
|
||||
# enlever le nom des canaux :
|
||||
sed -re 's:^\([A-Z/]+\) +\* +(.*)$:\1:' templog3.txt > templog4.txt
|
||||
# laisser uniquement les phrases traduites (attention, ça peut être étrange)
|
||||
sed -re 's#\{:[a-zA-Z]{2}:[^}]+\}@\{[[:space:]]##' templog4.txt > templog5.txt
|
||||
# Si quelqu'un joue avec des caractères bizarres, ça remet tout d'aplomb
|
||||
iconv -t utf-8 -c templog5.txt > "$logsortie"
|
||||
# Enlever les fichiers temporaires
|
||||
rm templog*.txt
|
164
2split_log.sh
Executable file
164
2split_log.sh
Executable file
|
@ -0,0 +1,164 @@
|
|||
#!/bin/bash
|
||||
# Dernière révision : 2021/10/31
|
||||
# Auteur : Zatalyz. Merci à YannK, Tycho et Glorf pour leurs nombreux conseils, les explications, l'aide et la patience !
|
||||
# Licence CC0
|
||||
# Ce script sépare les logs en 1 fichier de log par jour.
|
||||
# Il est prévu pour les logs du jeu Ryzom mais peut s'adapter à d'autres types de log (virer "pseudo !")
|
||||
# Mettre tous les logs en vrac dans le même dossier que le script, et lancer la moulinette.
|
||||
# La bonne commande à passer est
|
||||
# cmd ./dossiersource ./dossier final [nomperso]
|
||||
# Sans argument des variables par défaut seront utilisées. Le nom du perso peut être déduit des logs
|
||||
# Exemple :
|
||||
# ./split_log.sh ./logbrut/zatalyz/ ./final john
|
||||
# => les fichiers seront traités depuis ./logbrut/zatalyz/, et mis dans le dossier ./final sous le nom de log_john_année_mois_jour.txt
|
||||
# sans préciser "john", le nom des logs sera probablement celui de zatalyz, si les fichiers d'origine sont bien formatés comme log_zatalyz.txt ou log_zatalyz_*.txt
|
||||
# Le script range aussi les logs.
|
||||
# Attention ! Il laisse quelques fichiers dans le dossier courant.
|
||||
# Attention ! Gardez les logs originaux, dans quelques cas les lignes
|
||||
# ne sont pas analysées correctement (cas des retours à la ligne comme
|
||||
# dans les poèmes : la ligne ne commence plus par une date).
|
||||
|
||||
|
||||
#############
|
||||
# Variables #
|
||||
#############
|
||||
# Variables par défaut dans les checks : pouvoir les changer ?
|
||||
|
||||
# Vérification si le dossier source des logs existe et est renseigné
|
||||
if [ -d "$1" ]
|
||||
then originalfolderlog="$1"
|
||||
else originalfolderlog="./logsource"
|
||||
fi
|
||||
# Vérification si le dossier final des logs existe et est renseigné
|
||||
if [ -d "$2" ]
|
||||
then finalfolder="$2"
|
||||
else finalfolder="./final_logs"
|
||||
fi
|
||||
# Vérification si un nom de perso est donné et sinon, extraction depuis les noms de fichier
|
||||
if [ -z "$3" ]
|
||||
then
|
||||
myfunc() {
|
||||
basename -a "$originalfolderlog"/* | cut -d_ -f2 | uniq
|
||||
}
|
||||
perso="$(myfunc)"
|
||||
else perso="$3"
|
||||
fi
|
||||
|
||||
echo "Résultat final : nous partons de $originalfolderlog pour mettre les logs de $perso dans $finalfolder"
|
||||
|
||||
# Variables des dossiers de travail
|
||||
tmpfolder="./tmplogfolder"
|
||||
listrawlog="$tmpfolder/listrawlog.txt"
|
||||
rawfolder="$tmpfolder/raw_logs"
|
||||
yearfolder="$tmpfolder/year_logs"
|
||||
monthfolder="$tmpfolder/month_logs"
|
||||
dayfolder="$tmpfolder/day_logs"
|
||||
|
||||
#############
|
||||
# Script #
|
||||
#############
|
||||
# Vérifier si on a les dossiers temporaires de travail et sinon, les créer
|
||||
if [ -d "$rawfolder" ];then
|
||||
echo "Le dossier $rawfolder existe, passons à la suite";
|
||||
else
|
||||
mkdir -p "$rawfolder"
|
||||
echo "Le dossier $rawfolder a été créé, passons à la suite";
|
||||
fi
|
||||
if [ -d "$yearfolder" ];then
|
||||
echo "Le dossier $yearfolder existe, passons à la suite";
|
||||
else
|
||||
mkdir -p "$yearfolder"
|
||||
echo "Le dossier $yearfolder a été créé, passons à la suite";
|
||||
fi
|
||||
if [ -d "$monthfolder" ];then
|
||||
echo "Le dossier $monthfolder existe, passons à la suite";
|
||||
else
|
||||
mkdir -p "$monthfolder"
|
||||
echo "Le dossier $monthfolder a été créé, passons à la suite";
|
||||
fi
|
||||
if [ -d "$dayfolder" ];then
|
||||
echo "Le dossier $dayfolder existe, passons à la suite";
|
||||
else
|
||||
mkdir -p "$dayfolder"
|
||||
echo "Le dossier $dayfolder a été créé, passons à la suite";
|
||||
fi
|
||||
if [ -d "$finalfolder" ];then
|
||||
echo "Le dossier $finalfolder existe, passons à la suite";
|
||||
else
|
||||
mkdir -p "$finalfolder"
|
||||
echo "Le dossier $finalfolder a été créé, passons à la suite";
|
||||
fi
|
||||
|
||||
# On ne travaille pas sur les fichiers sources. Jamais.
|
||||
# Parce qu'il y a parfois des blagues dans les logs, on nettoie l'encodage.
|
||||
for file in "$originalfolderlog"/*
|
||||
do
|
||||
originallog="$(basename $file)"
|
||||
cat "$file" | tr -d "\000-\010" | tr -d "\016-\037" > "$rawfolder"/"$originallog"
|
||||
done
|
||||
# on va faire un très gros fichier avec tous les logs. Évitez de l'ouvrir avec un éditeur de texte basique.
|
||||
cat "$rawfolder"/* > "$tmpfolder"/logcomplet_"$perso".txt
|
||||
|
||||
#Et on va faire un fichier de controle donnant toutes les dates avec logs, et les lignes foireuses (genre chants) (à vérifier manuellement en cas de doute)
|
||||
cut -c 1-11 "$tmpfolder"/logcomplet_"$perso".txt | sort | uniq > controlline_"$perso".txt
|
||||
echo "$tmpfolder"/logcomplet_"$perso".txt et controlline_"$perso".txt créés
|
||||
|
||||
for logname in "$tmpfolder"/logcomplet_"$perso".txt
|
||||
do
|
||||
# Vérification que les fichiers sont bien des fichiers, ce serait bête de planter le script pour un manque de vérification
|
||||
if [ -f "$logname" ] ; then
|
||||
echo "$logname est un fichier et va être traité"
|
||||
# On va faire un seul gros fichier par année
|
||||
for year in {2009..2025} ; do
|
||||
#echo "${year}"
|
||||
grep "^${year}/" "$logname" >> "$yearfolder"/"${year}".log
|
||||
# Effacer les fichiers vides
|
||||
[ -s "$yearfolder"/"${year}".log ] || rm -f "$yearfolder"/"${year}".log
|
||||
#echo "${year} traitée"
|
||||
# On vérifie si le fichier d'année existe et on ne traite que celles qui existent
|
||||
if [ -f "$yearfolder"/"${year}".log ] ; then
|
||||
# Puis on va faire un fichier par mois
|
||||
for month in {01..12} ; do
|
||||
# echo "${year}/${month} en cours"
|
||||
grep "^${year}/${month}" "$yearfolder"/"${year}".log > "$monthfolder"/"${year}_${month}".log
|
||||
[ -s "$monthfolder"/"${year}_${month}".log ] || rm -f "$monthfolder"/"${year}_${month}".log
|
||||
# On vérifie si le fichier année/mois existe et on ne traite que ceux qui existent
|
||||
if [ -f "$monthfolder"/"${year}_${month}".log ] ; then
|
||||
#echo "$monthfolder"/"${year}_${month}".log
|
||||
# Puis un fichier par jour
|
||||
for day in {01..31} ; do
|
||||
#echo "${year}/${month}/${day} en cours"
|
||||
grep "^${year}/${month}/${day}" "$monthfolder"/"${year}_${month}".log > "$dayfolder"/log_"$perso"_"${year}_${month}_${day}".log
|
||||
[ -s "$dayfolder"/log_"$perso"_"${year}_${month}_${day}".log ] || rm -f "$dayfolder"/log_"$perso"_"${year}_${month}_${day}".log
|
||||
#echo "${year}/${month}/${day} traité"
|
||||
done
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "$logname n'est pas un fichier, il n'a pas été traité"
|
||||
fi
|
||||
done
|
||||
|
||||
#Tri des fichiers dans des dossiers du type Dossier_trié/perso/année/mois/log.log
|
||||
# On récupère la date, en formattant comme pour les logs
|
||||
for f in $dayfolder/*.log
|
||||
do
|
||||
year=${f: -14:4}
|
||||
month=${f: -9:2}
|
||||
day=${f: -6:2}
|
||||
|
||||
# On se fait une jolie variable qui imite la partie datée du nom des fichiers de log
|
||||
log=log_"$perso"_"${year}_${month}_${day}.log"
|
||||
# on créé le dossier de chaque mois dans les archives s'il n'existe pas
|
||||
mkdir -p "$finalfolder"/"$perso"/"$year"/"$month/"
|
||||
# on déplace ces logs dans leur archive
|
||||
mv "$dayfolder"/"$log" "$finalfolder"/"$perso"/"$year"/"$month"/"$log"
|
||||
done
|
||||
echo "Les fichiers ont été découpés et rangés"
|
||||
|
||||
# Nettoyage
|
||||
#rm -r "$tmpfolder"
|
||||
echo "faites un rm -r $tmpfolder si le dossier tmp était bien JUSTE pour le script..."
|
||||
echo "Tout est bon. Contrôlez le nombre de fichiers entre $finalfolder et controlline_$perso.txt"
|
27
3analyse_old_logryzom.sh
Executable file
27
3analyse_old_logryzom.sh
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/bash
|
||||
# Dernière révision : 2021/10/31
|
||||
# Auteur : Zatalyz. Merci à Madi, sans qui tout ça n'aurait jamais pu existé. Que ton Perl soit sanctifié.
|
||||
# Licence CC0
|
||||
# Ce script permet de ne garder que l'alentours et les emotes.
|
||||
# Les commandes sont paramétrées pour l'ancien système de log
|
||||
# Améliorer le sysinfo au fil des nettoyages.
|
||||
# Fonctionnement idéal : usr/bin/bash ./analyselogryzom.sh fichier_entrée fichier_sortie
|
||||
# On peut aussi renseigner les noms et chemins ici sur les variables :
|
||||
#logfile1="/home/zatalyz/Alinea/Histoires/Ryzomstories/log/logbrut/tri_perso_log/denakyo/log_denakyo2012_1215.txt"
|
||||
#logsortie="log_denakyo2012_1215_alentours.txt"
|
||||
logfile1="$1"
|
||||
logsortie="$2"
|
||||
# Canaux à virer (option -v)
|
||||
grep -v 'F4FF\|F80F\|BBBF\|18EF\|FCCF\|78FF\|AFBF\|BBFF' "$logfile1" > templog.txt
|
||||
# canaux à garder
|
||||
# grep "FFFF\|F99F\|FF4F"
|
||||
# vire le timestamp de début des lignes. Garde le * si ça peut servir à nettoyer le sys.info..
|
||||
cut -b 23- templog.txt > templog2.txt
|
||||
# enlever le nom des canaux @{FFFF}
|
||||
sed 's/@{[A-F0-9]\{4\}}//g' templog2.txt > templog3.txt
|
||||
# Si quelqu'un joue avec des caractères bizarres, ça remet tout d'aplomb
|
||||
iconv -t utf-8 -c templog3.txt > templog4.txt
|
||||
# analyser un fichier d'expression régulières de sysinfo et virer ce qui matche
|
||||
#grep -v -f "$fichier"
|
||||
grep -v -f sysinfo.ini templog4.txt > "$logsortie"
|
||||
#rm templog*.txt
|
67
README.md
67
README.md
|
@ -1,3 +1,66 @@
|
|||
# ryzom_log_cleaner
|
||||
# Gestion des logs
|
||||
Ensemble de scripts bash pour nettoyer les logs clients de Ryzom
|
||||
|
||||
## Analyse New log
|
||||
Pour analyser les logs d'après 2012/2013, par là.
|
||||
Fonctionnement idéal : /usr/bin/bash ./1analyse_new_logryzom.sh fichier_entrée fichier_sortie
|
||||
Par exemple :
|
||||
./1analyse_new_logryzom.sh log_zatalyz.txt log_zatalye_alentours.txt
|
||||
|
||||
Liste des canaux, si on veut filtrer autrement :
|
||||
SAY : alentours
|
||||
SAY/EMT : emotes
|
||||
SAY/BBL : messages de PNJ
|
||||
SAY/SHOUT : cris
|
||||
|
||||
UNIVERSE : Univers
|
||||
REGION : comme indiqué
|
||||
|
||||
SYSTEM : messages systèmes
|
||||
SYSTEM/BC : Broadcast (annonces des administrateurs)
|
||||
SYSTEM/AROUND : messages en alentours qui ne sont pas dit par des homins (genre "bienvenue sur ryzom)
|
||||
SYSTEM/ZON : Endroit où le personnage se trouve (affiché lors des changements de zone)
|
||||
SYSTEM/SPLM : Combat ?
|
||||
SYSTEM/SPL : Combat aussi
|
||||
SYSTEM/CHK : Check du système
|
||||
SYSTEM/ITM : gestion des items (type achat de TP)
|
||||
SYSTEM/DG : dégâts
|
||||
SYSTEM/DMG : Dommages
|
||||
SYSTEM/MIS : parade/esquive
|
||||
SYSTEM/ISE : Effets de type vedice etc
|
||||
SYSTEM/PVPTM : infos autour du pvp
|
||||
SYSTEM/TSK : informations à propos des missions
|
||||
SYSTEM/XP : expérience gagnée
|
||||
SYSTEM/THM : encyclopédie
|
||||
|
||||
GUILD/MTD : Mot du jour de la Guilde
|
||||
GUILD : Messages en guilde
|
||||
|
||||
DYN0, DYN1, DYN3, etc : canaux dynamiques. Le canal de langue est souvent sur DYN0
|
||||
|
||||
TELL : messages privés
|
||||
TEAM : messages en équipe
|
||||
|
||||
## Analyse Old Log
|
||||
Pour les logs d'avant le changement de système (donc avant 2013, je crois). Il FAUT un fichier sysinfo.ini, qui contient toutes les expressions régulières à filtrer (tout ce qui est dans le sys.infos). C'était plus lourd. Les canaux sont gardés selon un code couleur. À documenter, un jour, peut-être, ou pas : ça se retrouve en regardant les logs.
|
||||
|
||||
## Splitlog
|
||||
Ce script sépare les logs en 1 fichier de log par jour.
|
||||
Il est prévu pour les logs du jeu Ryzom mais peut s'adapter à d'autres types de log (virer "pseudo !")
|
||||
Mettre tous les logs en vrac dans le même dossier que le script, et lancer la moulinette.
|
||||
|
||||
La bonne commande à passer est
|
||||
cmd ./dossiersource ./dossier final [nomperso]
|
||||
Sans argument des variables par défaut seront utilisées. Le nom du perso peut être déduit des logs
|
||||
Exemple :
|
||||
./split_log.sh ./logbrut/zatalyz/ ./final john
|
||||
=> les fichiers seront traités depuis ./logbrut/zatalyz/, et mis dans le dossier ./final sous le nom de log_john_année_mois_jour.txt sans préciser "john", le nom des logs sera probablement celui de zatalyz, si les fichiers d'origine sont bien formatés comme log_zatalyz.txt ou log_zatalyz_*.txt
|
||||
|
||||
Le script range aussi les logs.
|
||||
|
||||
Attention ! Il laisse quelques fichiers dans le dossier courant. Gardez les logs originaux, dans quelques cas les lignes ne sont pas analysées correctement (cas des retours à la ligne comme dans les poèmes : la ligne ne commence plus par une date).
|
||||
|
||||
## Crédits et licence
|
||||
|
||||
Auteur : Zatalyz. Tout est sous licence CC0, c'est de l'assemblage de bons conseils et de tests, rien de transcendant. Plus de détail dans chaque script.
|
||||
|
||||
Ensemble de scripts bash pour nettoyer les logs clients de Ryzom
|
122
sysinfo.ini
Normal file
122
sysinfo.ini
Normal file
|
@ -0,0 +1,122 @@
|
|||
# Pas de ligne vide dans ce fichier ! Les commentaires fonctionnent.
|
||||
# Sys.Info : lignes commençants par...
|
||||
^Bienvenue dans Ryzom
|
||||
^MDJ
|
||||
^Vous êtes
|
||||
^Vous quittez
|
||||
^La téléportation
|
||||
^Vous avez détruit
|
||||
^Vous avez acheté
|
||||
^Vous avez reçu
|
||||
^Vous prenez votre
|
||||
^Vous rangez
|
||||
^Votre action de création
|
||||
^Vous vendez
|
||||
^Vos .* ont été vendu(e)s
|
||||
^Votre expérience dans la compétence
|
||||
^Vous avez déposé
|
||||
^Déconnexion annulée
|
||||
^Affichage des personnages en ligne dans la région
|
||||
^Vous avez franchi
|
||||
^Vous proposez à
|
||||
^Vous avez créé
|
||||
^Vous invitez
|
||||
^Vous avez quitté
|
||||
^Votre \w* \w* a été vendu
|
||||
^Joueurs dans le canal de discussion
|
||||
^Nouvelle cible ajoutée au compas
|
||||
^Votre compétence
|
||||
^Vous avez gagné
|
||||
^L[[:punct:]]échange est accepté
|
||||
^Vous achetez
|
||||
^Votre
|
||||
^Vous rejoignez
|
||||
^\w* a quitté votre équipe\.
|
||||
^\w* est maintenant le chef de votre équipe\.
|
||||
^\w* succède au chef de votre équipe\.
|
||||
^Vous étiez
|
||||
^Afficher les CSRs en ligne
|
||||
^Aucun personnage trouvé
|
||||
^\w* est inconnu(e) ou déconnecté(e)\.
|
||||
^Tâche réussie\.
|
||||
# Avec le nom du perso ou des autres
|
||||
^\"\w*\" a été sauvegardée\.
|
||||
^\w* rejoint
|
||||
^\w*\.
|
||||
^Vous avez
|
||||
# Combat
|
||||
^Vous ciblez
|
||||
^Vous jetez
|
||||
^Votre sort
|
||||
^Vous soignez
|
||||
^Vous régénérez
|
||||
^\w* est maintenant au maximum
|
||||
^.* vous attaque\.
|
||||
^.* atteint \w* \w*, infligeant
|
||||
^.* vous porte un coup critique
|
||||
^.* a esquivé votre attaque
|
||||
^.* a paré votre attaque
|
||||
^.* vous rate.
|
||||
^.* quitte le combat
|
||||
^.* vous fait perdre [[:digit:]]* points
|
||||
^.* résiste aux effets de votre sort\.
|
||||
^.* vous atteint mais n[[:punct:]]inflige pas de dégâts\.
|
||||
^.* n[[:punct:]]est plus \w*\.
|
||||
^.* subit une pénalité sur ses esquives\.
|
||||
^.* vous a enraciné et vous ne pouvez plus bouger\.
|
||||
^.* subit une pénalité sur ses compétences de combats\.
|
||||
^.* vous a désarmé\.
|
||||
^Vous attaquez
|
||||
^Vous atteignez
|
||||
^Vous avez esquivé
|
||||
^Vous avez paré
|
||||
^Vous ratez
|
||||
^Vous ralentissez
|
||||
^Vous étourdissez
|
||||
^Vous avez tué
|
||||
^Vous commencez
|
||||
^Les effets du pouvoir
|
||||
^A la recherche de ressources
|
||||
^Vous avez trouvé des ressources
|
||||
^Vos compétences de combats ne sont plus soumises à une pénalité
|
||||
^Vous portez
|
||||
^Vous faites
|
||||
^Vous avez été tué
|
||||
^Votre pénalité de décès
|
||||
^\w* vous jette
|
||||
^\w* vous soigne
|
||||
^\w* vous régénère
|
||||
^Vous subissez des dégâts
|
||||
^Vous pourrez être attaqué
|
||||
^Vous pouvez encore être attaqué
|
||||
^Vous obtenez
|
||||
^Bravo \! Vous obtenez la nouvelle compétence
|
||||
^Vous n[[:punct:]]obtenez
|
||||
^\w* obtient .* de qualité [[:digit:]]*\.
|
||||
^Il n[[:punct:]]y a rien à dépecer
|
||||
^Vous n[[:punct:]]avez pas le droit de dépecer cette carcasse
|
||||
^La cadavre que vous essayez
|
||||
^Le cadavre que vous essayez
|
||||
^Vous n[[:punct:]]êtes
|
||||
^Votre incantation
|
||||
^Vous activez
|
||||
^Vous gagnez
|
||||
^Vous perdez
|
||||
^Vous consommez
|
||||
^Vous ne pouvez pas jeter un sort sur un cadavre
|
||||
^Votre incantation est rompue
|
||||
^Vos esquives ne subissent plus de pénalité
|
||||
^Vous ne pouvez pas attaquer un personnage neutre
|
||||
^Ce sort ne peut être jeté que sur un ennemi
|
||||
^Vos attaques
|
||||
^Vous n[[:punct:]]avez
|
||||
^Vous ne pouvez pas
|
||||
^\w* a lancé un sort qui vous inflige
|
||||
^Vous résistez
|
||||
^Vous interrompez
|
||||
^Les attaques
|
||||
^Les compétences
|
||||
^Vous n[[:punct:]]attaquez plus
|
||||
^Vous utilisez
|
||||
#Forage
|
||||
^La source
|
Loading…
Reference in a new issue