IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[awk] Afficher le pattern et la 4ème ligne d'après


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut [awk] Afficher le pattern et la 4ème ligne d'après
    Bonjour à tous,
    je souhaite faire un script shell pour afficher plusieurs lignes d'un fichier. Ici je souhaite afficher les lignes :

    • Session Start = Wed Nov 17 11:53:34 CET 2013
    • Client IP = 30.25.67.136
    • Username = 636467885@test.fr
    • Attribute Name = X4
    • Data Value = ValueX4


    en traitant ce tout petit fichier texte, qui se génère plusieurs fois donc les valeurs des champs après le égale seront différentes ( cf.pièce jointe) ( qui a une organisation particulière, avec tabulation et espaces..)

    log_res.txt

    Pour la ligne "Attribute Name = X4" je souhaite afficher sa valeur correspondante c'est à dire "Data Value = ValueX4".

    J'ai essayé avec awk mais je n'ai trouvé comment affiché une ligne et sa ligne correspondante ( 4 lignes plus loin . Toujours à cette position!) tout en affichant aussi les autres lignes ( sessions start , client IP, Username)

    Se baser sur les numéro de lignes est impossible, puisque j'ai pas toujours le même nombre de ligne après la génération du fichier.


    Si vous avez une astuce je suis preneur. Je vous remercie pour votre aide

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    Bonjour,

    quelque chose m'échappe : une simple regex te permet d'afficher les lignes que tu veux, si elles commencent par les mots recherchés, par exemple.
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    quelque chose m'échappe : une simple regex te permet d'afficher les lignes que tu veux, si elles commencent par les mots recherchés, par exemple.
    ...
    ?
    Le problème c'est que l'affichage dans le fichier texte n'est jamais organisée. Si tu print le champs $3 ou $4 ce ne sera pas uniquement la valeur des champs qui sera affiché mais aussi les égales , espace vide etc... Ce que ne me permet pas faire ce que je souhaite

    je ne sais pas si je suis clair. Mais l'utilisation du fichier joint permettra de comprendre.

    Concernant les regex, est ce que tu aurais un petit exemple stp ?

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 292
    Par défaut
    Bonjour,

    pour moi, tu ne fais aucun effort. Donc je n'en fais pas plus. Voici ma solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ variable=X4
    $ echo $variable
    X4
    $ sed -n '/Session Start\|Client IP\|Username/p;/Attribute Name/!d;/'"$variable"'/!d;N;N;N;N;s/\n.*Type.*\n/\n/gp' log_res.txt 
     		Session Start (epoch seconds) = 3646465
     		Session Start = Wed Nov 17 11:53:34 CET 2013
     		Client IP = 30.25.67.136
     		Username = 636467885@test.fr
     			Attribute Name = X4
     			Data Value = ValueX4

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Merci Flodelarab.
    Effectivement je m'étais plus penché sur Awk et je ne connaissais pas l'existence du buffer avec Sed Désolé pour le dérangement


    Toute fois , je ne comprend pas la fin de la commande , cette partie


  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 292
    Par défaut
    les commandes N vont accumuler les lignes à la suite. Mais les lignes qui parlent du "type" ne semble pas t'intéresser. Donc on les substitue par rien ( = suppression)
    \n est le caractère de fin de ligne.
    . est n'importe quel caractère.
    .* est n'importe quel caractère en n'importe quelle quantité.
    g et p sont des drapeaux. g pour répéter le changement, p pour imprimer le résultat.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [awk] Afficher certaines lignes d'un fichier
    Par tublit dans le forum Shell et commandes POSIX
    Réponses: 6
    Dernier message: 03/09/2014, 09h44
  2. Réponses: 3
    Dernier message: 24/06/2009, 19h34
  3. Réponses: 3
    Dernier message: 20/05/2007, 23h41
  4. Afficher en html un saut de ligne d'un <textarea>
    Par lagag dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/04/2007, 11h06
  5. Réponses: 1
    Dernier message: 15/04/2007, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo