Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e)

je cherche a faire un tri sur un fichier de log.

je recherche un seul type d'incident.

le souci est que j'arrive bien a macther l'expression que je veux, mais je voudrai aussi la ligne precedent qui m'indique l'heure et la date.

 

Mon fichier erreur.log est du type:

"fddsqfdsqfjsdùkmfj

dfdsfdsfdfdfqsff

15 mars 2003 14h14

erreur 123

fgfdsgh

ghhghghhgfhd

gbjgbkmgjbmjkjhjrapg

30 mars 2003 10h23

erreur 123"

 

 

Ma ligne de commande est:

awk ' /erreur 123/ {print $0} ' erreur.log

 

je sais qu'il existe la variable NR est indique le nombre d'enregistrement lu, mais je ne sais pas si on peut lui indique de sortir la ligne numero NR-1.

 

si je fais :

awk ' /erreur 123/ {print NR-1,$0}', cela me sort le numero de la ligne avant l'enregistrement courant, mais je veux la ligne qui correspond a ce numero.

Posté(e)

Tu traites le fichier ligne à ligne, tu ne peux pas afficher la ligne précédente lors du traitement d'une ligne.

Le mieux est de stocker dans une variable chaque ligne (à la fin du script awk) histoire de pouvoir la ressortir lorsque la ligne courante correspond à /^erreur 123/ ...

awk '/^erreur 123/ {print MOINSUN, $0 } /^/ { MOINSUN = $0 }' erreur.log

Fonctionne avec gawk...

Pas mieux...

Posté(e)

j'ai trouvé une solution, barbare, mais qui marche, en utilisant les commande head et tail et la variable NR de awk qui me donne le numero de la ligne traité:

 

for i in `awk /erreur 123/ {print NR}` erreur.log
do head -$i erreur.log | tail -2                                # Je recupre les NR premiere lignes du fichier et ne sort que les 2 dernieres
done

Posté(e)

juste pour info, j'ai reussi, un petit peu plus a optimiser mon traitement, en evitant la boucle for avec la commande system de awk

 

  FIC=erreur.log
awk -vfic=$FIC '/erreur 123/ {system("head -"NR" "fic"|tail -2")}' $FIC 

Posté(e)

pour ma culture, c'est quoi comme type de langage awk??

Posté(e)

La commande awk sous les system unix ou linux, permet de faire des traitements sur des fichiers, en ressortir les information que tu veux, ou faire de la mise en forme.

 

il traite ligne par ligne le contenu du fichier et y applique les fonctions que tu as defini dans ton awk, a travers un language, qui me semble ressemble au C ( instruction printf, close de fichier ex ....)

Posté(e)

tangui : c'est un langage interprété, à base d'expressions "régulières" (oui, c'est une mauvaise traduction de "regular expressions"), le reste c'est de la syntaxe façon script... et comme pas mal d'outils en ligne de commande, ça te permet de manipuler des fichiers comme bon te semble...

 

linux72 : ta solution est hyper-bourrine, rouvrir le fichier à chaque ligne rencontrée pour récupérer la précédente... elle te plaisait pas ma solution ???

Posté(e)

^ en regexp c'est le début de ligne (juste pour qu'il évite de tout parser si ton code erreur est bel et bien signalé en début de ligne)... dans le même registre, le $ indique la fin de ligne...

Le ^ est utilisé en négation dans les ranges de caractères : [^u] <---- pas "u"

Pour en revenir à mon code, oui, chaque ligne est mise en mémoire dans la variable "MOINSUN" et est ressortie au moment opportun... si ça t'embête, tu peux faire un vrai filtre pour ne mémoriser que les lignes contenant une date, mais je te laisse chercher quoi mettre entre les deux / ;-)

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...