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

Romain_iBalix -  
zipe31 Messages postés 38797 Statut Contributeur -
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.

A voir également:

4 réponses

zipe31 Messages postés 38797 Statut Contributeur 6 433
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
sed -n 's/^\(.*\) a remporté la partie.*/\1/p' plop
Pour le début de ligne non ?
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut,

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

Merchi ;-)
0
CépaMoi
 
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
 
J'ai juste configuré la syntaxe, je ne peux pas choisir la destination :/
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
$ grep -oP '(?<=[0-9][0-9];).*(?= a remporté)' log
lmi3alix
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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