#1 Le 04/09/2020, à 12:13
- Marmotte2405
Manipulation de données dans un fichier
Bonjour à tous,
Je cherche a ressortir des données d'un fichier de log et j'aurais besoin d'aide pour améliorer tout ca
voici monfichier.log (en plus long et plusieurs fois)
[81971] 2020/09/04 14:37:52.923 : [INFO] Current configuration name to process : "MON_CODE_UN"...
2020-09-04 14:37:55,627 INFO fonction - Number of objects removed: 2
[81971] 2020/09/04 14:37:55.671 : [INFO] Current configuration name to process : "MON_CODE_DEUX"...
2020-09-04 14:37:57,606 INFO fonction - Number of objects removed: 0
Ce qui m'intéresse c'est de récupérer les lignes ou il y a Configuration et removed, donc je grep et je ne ressors que mes lignes
ensuite coup de bol sur ses 2 lignes les informations que je cherche sont en 12 ème position (facilité mais peut etre qu'il faut mieux que je ne fasse pas comme ca), donc je ne garde que ca ce qui me donne :
"MON_CODE_UN"...
2
"MON_CODE_DEUX"...
0
sachant que dans le log il y a plusieurs lignes qui m’intéresse donc cela se répète.
j'enlève les "" et les ...
mais ce n'est vraiment pas joli (sachant que je dois scripter ca en php pour récupérer les valeurs)
donc la commande ca donne ca :
egrep "configuration|removed" monfichier.log | cut -d' ' -f12 | sed 's/^"//' | sed -e 's/\"...$//'
et le résultat :
MON_CODE_UN
2
MON_CODE_DEUX
0
etc ...
Est ce que quelqu'un saurait m'aider pour améliorer tout ca?
PS : c'est peut être compliqué avec les données que je donne mais je ne souhaite pas mettre les vraies.
Merci d'avance pour votre aide.
Dernière modification par Marmotte2405 (Le 04/09/2020, à 18:18)
Hors ligne
#2 Le 04/09/2020, à 12:39
- sputnick
Re : Manipulation de données dans un fichier
Salut, avec une commande awk:
awk '/TEXTEE|TEXTER/{gsub(/"|\"\.\.\.$/, ""); print $12}' monfichier.log
Dernière modification par sputnick (Le 04/09/2020, à 12:40)
Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr
Hors ligne
#3 Le 04/09/2020, à 13:22
- Marmotte2405
Re : Manipulation de données dans un fichier
Merci pour ta réponse sputnick mais cela ne me retourne pas mes chiffres, j'obtiens :
MON_TEXTE_UN
MON_TEXTE_DEUX
Edit : J'ai l'impression que du coup avec ta methode mon chiffre n'est plus à la 12ème place (dans mon cut j'ai mis l'espace en délimiteur, est ce que cela vient de ca?), du coup j'ai édité mon premier message avec quelque chose qui ressemble plus a ce que j'ai.
Edit 2 : Effectivement dans la première c'est a la 12eme place dans la eme ligne c'est arrivé à la 10ème
Dernière modification par Marmotte2405 (Le 04/09/2020, à 13:53)
Hors ligne
#4 Le 04/09/2020, à 13:53
- pingouinux
Re : Manipulation de données dans un fichier
Bonjour,
En adaptant un peu la commande de sputnick (impression du dernier champ) :
awk '/configuration|removed/{gsub(/"|\"\.\.\.$/, ""); print $NF}' monfichier.log
Édité :
J'ai quand même un doute. Les trois points à la fin de certaines lignes sont peut-être l'indication qu'il y a une suite.
Dernière modification par pingouinux (Le 04/09/2020, à 14:44)
Hors ligne
#5 Le 04/09/2020, à 14:58
- Marmotte2405
Re : Manipulation de données dans un fichier
Bonjour,
En adaptant un peu la commande de sputnick (impression du dernier champ) :awk '/configuration|removed/{gsub(/"|\"\.\.\.$/, ""); print $NF}' monfichier.log
Édité :
J'ai quand même un doute. Les trois points à la fin de certaines lignes sont peut-être l'indication qu'il y a une suite.
Merci cela fonctionne correctement.
Hors ligne
#6 Le 04/09/2020, à 18:31
- Marmotte2405
Re : Manipulation de données dans un fichier
Je souhaiterais scripter ma commande afin de pouvoir lui passer des paramètres, j'ai réussi à l'afficher avec un echo mais pas a faire la commande, est ce que vous pouvez encore m'aider ?
Commande :
i=" '"'/configuration|removed/{gsub(/"|\"\.\.\.$/, ""); print $NF}'"' "; echo awk $i monfichier.log;
Résultat
awk '/configuration|removed/{gsub(/"|\"\.\.\.$/, ""); print $NF}' monfichier.log
Si j'enlève le echo :
i=" '"'/configuration|removed/{gsub(/"|\"\.\.\.$/, ""); print $NF}'"' "; awk $i monfichier.log
awk: ligne de commande:1: '/configuration
awk: ligne de commande:1: ^ caractère incorrect « ' » dans l'expression
Même chose avec
i="awk '"'/configuration|removed/{gsub(/"|\"\.\.\.$/, ""); print $NF}'"' monfichier.log"; $i
awk: ligne de commande:1: '/configuration
awk: ligne de commande:1: ^ caractère incorrect « ' » dans l'expression
Dernière modification par Marmotte2405 (Le 04/09/2020, à 18:34)
Hors ligne
#7 Le 04/09/2020, à 19:46
- pingouinux
Re : Manipulation de données dans un fichier
Essaye
i='/configuration|removed/{gsub(/"|"\.\.\.$/, ""); print $NF}'; awk "$i" monfichier.log
Hors ligne
#8 Le 04/09/2020, à 20:03
- Watael
Re : Manipulation de données dans un fichier
l'intention est absurde.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 07/09/2020, à 16:50
- LeoMajor
Re : Manipulation de données dans un fichier
bonjour,
1/
awk 'BEGIN {FPAT="\".*\"|[0-9]"} /configuration/ {gsub(/["]/,"",$NF); print $NF; getline; print $NF}' exemple.log
MON_CODE_UN
2
MON_CODE_DEUX
0
2/ plutôt pour le fun. Test GetOptions
nano foo.gambas
Use "gb.pcre"
Use "gb.args"
Public Sub Main()
Dim f as file
Dim r As New RegExp
'GetOptions
Dim Gtar As String
Dim Gver As Boolean
Dim Gsup As String[]
Args.Begin("executable: Usage ...\n./foo.gambas --path fichier\ngbr3 foo.gambas -p fichier\nscript: Usage ...\ngbs3 foo.gambas -p fichier")
Gver = Args.Has("v", "version", "retourne la version")
Gtar = Args.Get("p", "path", "fichier comme argument de -p/--path")
Gsup = Args.End()
If Gver = True Then
Print "version 1.2.3"
Return 'exit sub
End If
If Not Gtar Then
f = open "~/exemple.txt"
Else
if Exist(Gtar) then f = open Gtar
End If
r.Compile("(removed: ([0-9]+)$|configuration.*\"(.+)\")")
For Each l As String In f.lines
If l Then
r.Exec(l)
If r.count = 2 Then Print r[2].Text
If r.count = 3 Then Print r[3].Text
End If
Next
Catch
Print error.text
End
gbs3 foo.gambas -p exemple.log
MON_CODE_UN
2
MON_CODE_DEUX
0
Hors ligne