Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/09/2020, à 13: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, à 19:18)

Hors ligne

#2 Le 04/09/2020, à 13: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, à 13:40)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 04/09/2020, à 14: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 sad

Dernière modification par Marmotte2405 (Le 04/09/2020, à 14:53)

Hors ligne

#4 Le 04/09/2020, à 14: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, à 15:44)

Hors ligne

#5 Le 04/09/2020, à 15:58

Marmotte2405

Re : Manipulation de données dans un fichier

pingouinux a écrit :

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, à 19: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, à 19:34)

Hors ligne

#7 Le 04/09/2020, à 20: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, à 21:03

Watael

Re : Manipulation de données dans un fichier

l'intention est absurde.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#9 Le 07/09/2020, à 17: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