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

Linux Discussion :

Awk - formater un fichier


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Awk - formater un fichier
    J'ai un fichier constitué de plusieurs paquets de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NE Name:        |CAO01
    NE Type:        |SEP
    Event ID:       |01-janv
    Severity:       |Critical
    Description:    |%s: %s unaccessible
    New Description:|       -- not available --
    Long Text:      |LAN communication is lost or the process is not running.
    Repair Text:    |Check for running process set tion path using the LAN.
    Annotation:     |none

    Et je cherche à le transposer. Voici ce que j'ai écris avec awk mais je n'ai toujours pas le format escompté. Pouvez vous m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    awk -F "|" '
    BEGIN { i=0
            REF[i] = "0000"
          }
    {if (/^NE Name/ ) {i ++
                           NEName[i".1"] = $2 }
    if (/^NE Type/ ) {NEType[i".2"] = $2 }
    if (/^Event ID/ ) {EventID[i".3"] = $2 }
    if (/^Severity/ ) {Severity[i".4"] = $2 }
    if (/^Description/ ) {Description[i".5"] = $2 }
    if (/^New Description/ ) {NewDescription[i".6"] = $2 }
    if (/^Long Text/ ) {LongText[i".7"] = $2 }
    if (/^Repair Text/ ) {RepairText[i".8"] = $2 }
    if (/^Annotation/ ) {Annotation[i".9"] = $2 } }
     
    END {
           for (a = 1 ; a <= i ; a++)
           {print NEName[a".1"] "|" NEType[a".2"] "|" EventID[a".3"] "|" Severity[a".4"] "|" Description[a".5"] "|" NewDescription[a".6"] "|" LongText[a".7"] "|" RepairText[a".
    8"] "|" Annotation[a".9"]}
    } ' File > Cool.txt
    Merci

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Attention !!!

    Le bloc BEGIN est exécuté au début du parcours du fichier, et le bloc END est exécuté lors de la fermeture du flux de données.

    Tu risques donc d'avoir des soucis de lecture de tes "plusieurs blocs", puisqu'entre les deux, il ne se passe ... rien

    Il vaudrait peut être mieux bien identifier le séparateur des blocs. Ainsi, tant que tu récupères des "données", tu alimentes ton tableau, et chaque fois que tu repère un changement de bloc, tu affiches ton tableau et tu le vides pour accueillir les données du bloc suivant.

    Bon courage.

Discussions similaires

  1. [FLASH MX2004] Format de fichier inattendu
    Par k2r.fr dans le forum Flash
    Réponses: 1
    Dernier message: 05/07/2005, 11h43
  2. [C / C++][Format de fichier] Le TIFF G4
    Par chronos dans le forum Windows
    Réponses: 1
    Dernier message: 17/06/2005, 15h57
  3. Format de fichier extensible
    Par Rodrigue dans le forum C++Builder
    Réponses: 9
    Dernier message: 11/06/2005, 14h45
  4. [Format de Fichier] Recherche de site
    Par Pedro dans le forum Windows XP
    Réponses: 5
    Dernier message: 12/04/2005, 16h11
  5. Quel format de fichier utiliser pour les maps ?
    Par fb57 dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/09/2004, 20h22

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