Chercher une syntaxe, en extraire un mot puis le stocker [.log]

Fermé
Romain_iBalix - Modifié par Romain_iBalix le 25/06/2015 à 14:35
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 26 juin 2015 à 11:11
Bonjour,

Je suis Romain, gérant d'un gros serveur Minecraft. Je suis confronté à un problème qui m'empêche d'ouvrir une nouvelle fonctionnalité pour mes joueurs, c'est pourquoi je sollicite vote aide.

Voici le problème en question:

J'ai configuré un plugin de jeu automatisé qui, à la fin de la partie, écrit dans les logs "XXX a remporté la partie" (XXX étant le nom d'un joueur). Je souhaiterais récupérer le "XXX", le stocker dans un fichier texte puis l'utiliser pour le récompenser par la suite.

Le plugin écrit dans un fichier server.log (/home/minecraft/hg/server.log) et utilise toujours la même syntaxe: http://prntscr.com/7l53k7. Sachant que le joueur n'est jamais le même, c'est là que je bloque, je sais rechercher un mot avec la fonction grep mais je ne sais pas chercher un mot que je ne connais pas à l'avance..

Je pense qu'il faudrait commencer par localiser la syntaxe "a remporté la partie" puis après exploiter la ligne en question en copiant directement le terme recherché ou en supprimant des mots, je ne sais pas...

Une fois le mot isolé, il faudrait qu'il soit stocké seul dans un fichier texte pour que je puisse ensuite l'envoyer sur mes 12 autres machines pour par la suite l'exploiter.

Voilà, je ne sais pas si mes explications sont très claires, mais je vous avoue être totalement dépassé par la situation, votre aide serait la bienvenue.

Cordialement,

Romain.

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
25 juin 2015 à 17:50
Salut,

On va partir du principe que le nom de ton joueur (XXX) se trouve bien en début de ligne et que ladite ligne comporte la phrase "a remporté la partie", ce qui nous donne avec "sed" :
$ cat plop 
Voici le problème en question:

J'ai configuré un plugin de jeu automatisé qui, à la fin de la partie, écrit dans les logs
XXX a remporté la partie" (XXX étant le nom d'un joueur).
Je souhaiterais récupérer le "XXX", le stocker dans un fichier texte puis l'utiliser pour le récompenser par la suite.

$ sed -n 's/\(.*\) a remporté la partie.*/\1/p' plop
XXX

1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
26 juin 2015 à 10:25
sed -n 's/^\(.*\) a remporté la partie.*/\1/p' plop
Pour le début de ligne non ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
26 juin 2015 à 11:11
Salut,

Exact, honte à moi, j'ai oublié le chapeau chinois ;-(

Merchi ;-)
0
Salut,
J'ai configuré un plugin de jeu automatisé qui, à la fin de la partie, écrit dans les logs "XXX a remporté la partie"
Juste un truc, puisque tu sais écrire dans les fichiers logs, pourquoi n'écris-tu pas aussi directement le nom du joueur dans un fichier (portant le même nom que le joueur par exemple) ?
Ce serait plus simple non ?
0
Romain_iBalix
25 juin 2015 à 15:48
J'ai juste configuré la syntaxe, je ne peux pas choisir la destination :/
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 26/06/2015 à 09:50
hello
$ grep -oP '(?<=[0-9][0-9];).*(?= a remporté)' log
lmi3alix
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
26 juin 2015 à 10:23
Salut.
si ton nom de joueur ne comporte pas d'espace, tu peu faire ça :
selectionner uniquement les bonnes lignes :
grep "a remporté" 

Ensuite, tu selectionnes juste le premier groupe de caractère (-f 1) avant l'espace (-d ' '):
cut -d ' ' -f 1

Pour finir, tu peux compter le nombre de fois que chaque joueur a gagné en triant la sortie et en comptant le nombre de lignes identique :
sort | uniq -c

Ce qui donne au final :
grep "a remporté"|cut -d ' ' -f 1 | sort | uniq -c <log 

Note : je n'ai pas testé, mais avec mes explication et les man de chaque "fonction" tu devrais t'en sortir.
0