Refactorisation des scripts en un seul qui fait tout ou presque. Mise à jour du Readme.

This commit is contained in:
Zatalyz 2022-02-14 15:21:42 +01:00
parent e9aae9e4c1
commit 5f98004851
6 changed files with 278 additions and 243 deletions

View file

@ -1,28 +0,0 @@
#!/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

View file

@ -1,164 +0,0 @@
#!/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"

View file

@ -1,70 +1,61 @@
# 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
Pour analyser les logs d'après 2012/2013 (au moment où le format a changé).
Fonctionnement idéal : `/bin/bash ./1analyse_new_logryzom.sh fichier_entrée fichier_sortie`
Lancez
./clean _log.sh
Et regarder ce qui est dit.
Par exemple :
Mettez les logs d'un seul perso dans le dossier "sources_brutes".
Cela ne prends pas les persos mélangés (pas encore...).
`./1analyse_new_logryzom.sh log_zatalyz.txt log_zatalye_alentours.txt`
On peut aussi passer des arguments pour préciser les dossiers, mais quel intérêt ? Voir options dans le script.
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
Le script va découper les logs de base pour avoir un fichier par jour, puis analyser chacun de ces fichiers afin d'en avoir une version nettoyée avec uniquement les infos qu'on souhaite garder (généralement le rp en alentours).
Attention ! 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). Gardez les logs originaux et controllez manuellement selon les indications du script.
## 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.
### Vieille version des logs et snippet
Pour les logs d'avant le changement de système (donc avant 2013, je crois) : afin de pouvoir continuer à nettoyer ce genre de log, le script "analyse_old_logryzom.sh" est là. À prendre tel quel. 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.
Le script "erase_all.sh" (qui est un snippet plus qu'un script) permet de remettre son dossier à neuf avant de relancer une analyse. Évitez de le lancer si vous ne voulez pas tout effacer, après c'est perdu pour de vrai.
Il est prévu pour les logs du jeu Ryzom mais peut s'adapter à d'autres types de log (virer "pseudo !")
## Liste des canaux
Si on veut filtrer autrement. Par défaut, le script est réglé pour l'alentours (emotes et cris compris) + une indication sur les zones traversées, afin de suivre quand les persos se déplacent.
Mettre tous les logs en vrac dans le même dossier que le script, et lancer la moulinette.
SAY : alentours
SAY/EMT : emotes
SAY/BBL : messages de PNJ
SAY/SHOUT : cris
La bonne commande à passer est
UNIVERSE : Univers
REGION : comme indiqué
`cmd ./dossiersource ./dossier final [nomperso]`
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
Sans argument des variables par défaut seront utilisées. Le nom du perso peut être déduit des logs
GUILD/MTD : Mot du jour de la Guilde
GUILD : Messages en guilde
Exemple :
DYN0, DYN1, DYN3, etc : canaux dynamiques. Le canal de langue est souvent sur DYN0
`./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).
TELL : messages privés
TEAM : messages en équipe
## Crédits et licence

232
clean_log.sh Executable file
View file

@ -0,0 +1,232 @@
#!/bin/bash
# Dernière révision : 2022/02/14
# Auteur : Zatalyz. Merci à YannK, Tycho et Glorf pour leurs nombreux conseils, les explications, l'aide et la patience !
# Licence CC0
# Ce script fait tout en un coup !
# 1) Splitter les logs de Ryzom qu'on lui file et les ranger dans les bons dossiers
# 2) Nettoyer et ne garder que les logs alentours
# Et ceci avec des lots de fichiers.
# ! Il faut que ce soit un seul perso par contre, ça ne veut pas marcher sinon !
# Attention, le script cherche en "dur" des années 2009 à 2025. Si les logs sont en dehors de ces dates, corrigez.
# Syntaxe : par défaut il va tout trouver et dire s'il y a un souci. Lancez simplement
# ./clean _log.sh
# Mais si besoin de préciser :
# ./clean _log.sh dossier_source dossier_tri dossier_alentours perso
# dossier_source = dossier des logs bruts au format ryzom
# dossier_tri = dossier de tri des fichiers bruts en un fichier par jour
# dossier_alentours = dossiers avec les fchiers de logs nettoyés pour ne garder que "alentours".
# perso = nom du perso
# 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). Cela se controle avec le fichier
#############
# Variables #
#############
# Canaux à analyser
channels="SAY\|SHOUT\|SYSTEM\/ZON"
# Vérification si le dossier source des logs existe et est renseigné
if [ -d "$1" ]
then foldersource="$1"
echo "Le dossier $foldersource existe, passons à la suite";
else foldersource="./sources_brutes"
if [ -d "$foldersource" ]
then echo "Le dossier $foldersource existe, passons à la suite";
else
mkdir -p "$foldersource"
echo "Le dossier $foldersource n'existait pas et été créé, déplacez les logs sources dedans";
exit
fi
fi
# Vérification si le dossier des logs bruts triés existe et sinon, le créer
if [ -d "$2" ]
then folderrawsorted="$2"
echo "Le dossier $folderrawsorted existe, passons à la suite";
else folderrawsorted="./sources_tri"
if [ -d "$folderrawsorted" ]
then echo "Le dossier $folderrawsorted existe, passons à la suite";
else mkdir -p "$folderrawsorted"
echo "Le dossier $folderrawsorted a été créé, passons à la suite";
fi
fi
# Vérifier si on a le dossier pour les logs alentours et sinon, le créer
if [ -d "$3" ]
then folderaround="$3"
echo "Le dossier $folderaround existe, passons à la suite";
else folderaround="./alentours"
if [ -d "$folderaround" ]
then echo "Le dossier $folderaround existe, passons à la suite";
else mkdir -p "$folderaround"
echo "Le dossier $folderaround a été créé, passons à la suite";
fi
fi
# Extraire le nom du persos depuis les noms de fichier
# TODO truc améliorable : arriver à gérer plusieurs persos
if [ -z "$4" ]
then
myfunc() {
basename -a "$foldersource"/* | cut -d_ -f2 | uniq
}
perso="$(myfunc)"
else perso="$4"
fi
# Avoir une variable avec la majuscule au pseudo
pseudo=${perso^}
# Dossiers nécessaires à faire le travail
tmpfolder="./tmplogfolder"
listrawlog="$tmpfolder/listrawlog.txt"
rawfolder="$tmpfolder/raw_logs"
yearfolder="$tmpfolder/year_logs"
monthfolder="$tmpfolder/month_logs"
dayfolder="$tmpfolder/day_logs"
tmparoundfolder="$tmpfolder/tmparoundfolder"
tmparoundfolder2="$tmpfolder/tmparoundfolder2"
# Comme ils sont détruits à la fin, on les recrée à chaque fois
mkdir -p "$tmpfolder" "$rawfolder" "$yearfolder" "$monthfolder" "$dayfolder" "$tmparoundfolder" "$tmparoundfolder2"
echo "Fichiers du personnage $pseudo prêts à être traités" ;
#############
# Split #
#############
# Cette partie sépare les logs bruts en 1 fichier de log par jour.
# 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 "$foldersource"/*
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
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é/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 "$folderrawsorted"/"$year"/"$month/"
# on déplace ces logs dans leur archive
mv "$dayfolder"/"$log" "$folderrawsorted"/"$year"/"$month"/"$log"
done
echo "Les fichiers ont été découpés et rangés"
#############
# Alentours #
#############
# Alors là, la misère... car on a des fichiers dans des sous-dossiers.
# Le plus simple : tout remettre dans un dossier en vrac et traiter à partir de là.
find "$folderrawsorted" -maxdepth 4 -name '*.log' -exec cp {} "$tmparoundfolder"/ \;
for mylog in "$tmparoundfolder/log"*.log
do
justnamelog() {
basename -s .log "$mylog"
}
namelog="$(justnamelog)"
sourcelog="$tmparoundfolder/${namelog}.log"
finallog="$tmparoundfolder2/${namelog}_alentours.txt"
#./1analyse_new_logryzom.sh $sourcelog $finallog
# Analyse des logs proprement dites
# Canaux à garder
# Alentours + Endroit où on est
grep "$channels" "$sourcelog" > 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
# Remplacer "vous dites" par "Pseudo dit"
sed s/"Vous dites :"/"$pseudo dit :"/g templog5.txt > templog6.txt
sed s/"Vous criez"/"$pseudo crie :"/g templog6.txt > templog7.txt
# Si quelqu'un joue avec des caractères bizarres, ça remet tout d'aplomb
iconv -t utf-8 -c templog7.txt > "$finallog"
# Enlever les fichiers temporaires
rm templog*.txt
#echo "$sourcelog a été traité en tant que $finallog" #très bavard
done
# Retrier par année les fichiers nettoyés
for faround in $tmparoundfolder2/*.txt
do
# penser à compter les 10 caractères "alentours" pour que la variable marche
year=${faround: -24:4}
month=${faround: -19:2}
day=${faround: -16:2}
# On se fait une jolie variable qui imite la partie datée du nom des fichiers de log
finallogsorted=log_"$perso"_"${year}_${month}_${day}_alentours.txt"
# on créé le dossier de chaque mois s'il n'existe pas
mkdir -p "$folderaround"/"$year"/"$month/"
# on déplace ces logs dans leur archive
mv "$tmparoundfolder2"/"$finallogsorted" "$folderaround"/"$year"/"$month"/"$finallogsorted"
done
#############
# Dernier ménage #
#############
# Nettoyage
rm -r "$tmpfolder"
# On compte et vérifie les fichiers
count=$(find $folderrawsorted -maxdepth 4 -name '*.log' | wc -l)
echo "Les sources sont triées en $count fichiers dans $folderrawsorted. Contrôlez ce nombre sur controlline_$perso.txt"
countaround=$(find $folderaround -maxdepth 4 -name '*.txt' | wc -l)
echo "$countaround fichiers ont été nettoyés et rangés dans $folderaround. "
if [ "$count" = "$countaround" ]
then echo "Il semble y avoir le bon nombre de fichiers traités entre les bruts triés et les log nettoyés" ;
else echo "Attention, il y a une incohérence dans le nombre de fichiers traités entre les bruts triés et les log nettoyés" ;
fi

4
erase_all.sh Normal file
View file

@ -0,0 +1,4 @@
#!/bin/bash
# Dernière révision : 2022/02/14
# Erase_all remet le dossier "à vide". Attention ça efface comme un bourrin.
rm -r ./alentours ./sources_tri ./sources_brutes/* controlline_*.txt