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 :

comment imprimer (print) dans un ordre donné? (AWK)


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
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Par défaut comment imprimer (print) dans un ordre donné? (AWK)
    Bonjour,

    dans mon fichier d'origine j'ai:

    Test1 ...
    Test4 ....
    Test2 ...
    Test3 ...


    j'aimerai imprimer un resultat dans l'ordre de mon code:

    Test1
    Test2
    Test3
    Test4


    quand je fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ($1 == "Test1"){
    print ("a")}
     
    ($1 == "Test2"){
    print ("b")}
     
    ($1 == "Test3"){
    print ("c")}
     
    ($1 == "Test4"){
    print ("d")}
    a, d, b et c s'imprime de cette maniere et pas dans l'ordre dans lequel le script a été ecrit (a, b, c et d). Donc selon ce qu'il trouve en premier dans le fichier d'origine...

    Comment resoudre ce probleme svp?

    Merci d'avance pour votre aide,

    Cdt,

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Awk ne s'utilise pas comme un langage procédural normal. Un programme awk s'exécutera pour *chaque ligne* du fichier donné en entrée. Si tu en arrives à te poser la question de l'ordre d'impression, c'est que ton code awk est mal conçu. Du moins dans l'esprit awk. Pourrais-tu donner un exemple simplifié mais représentatif de ton fichier en entrée et de la sortie désirée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Par défaut
    Bonjour,

    merci beaucoup pr l'aide...

    Je trouve que c'est dommage si on ne peut pas choisir l'ordre de l'impression. AWK est un script permettant de faire des manip sur les formats des fichiers. il est tres legitime lors d'une convertion d'un fichier de format A -> B de choisir un ordre où par exemple les tableau ou mots clés sont definies. le fichier transformé (B) sera ensuite importé dans un soft et donc il faut absolument avoir un format bien determiné pr que l'import se fait...


    Je vous envoi le fichier d'origine, converti en PJ

    actuellement le fichier converti donne ca:

    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
    -- ' ' units - 
    0 /
    -- THP units - Psia
    214.696  614.696  1014.7  3014.7  
    /
     
    -- LIQ units - stb/day
    21.5899  1155.85  2290.12  3424.38  
    4558.64  5692.91  6827.17  7961.43  
    9095.69  10230  11364.2  12498.5  
    13632.7  14767  15901.3  17035.5  
    18169.8  19304.1  20438.3  21572.6  
    /
     
    -- WCT units - stb/stb
    0  0.4  0.8  /
     
    -- GOR units - Mscf/stb
    400  820  2000  /
    je souhaite avoir absolument ca pour que ca soit ensuite "importable" dans le soft:

    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
    21
    22
    23
     
    -- LIQ units - stb/day
    21.5899  1155.85  2290.12  3424.38  
    4558.64  5692.91  6827.17  7961.43  
    9095.69  10230  11364.2  12498.5  
    13632.7  14767  15901.3  17035.5  
    18169.8  19304.1  20438.3  21572.6  
    /
     
    -- THP units - Psia
    214.696  614.696  1014.7  3014.7  
    /
     
    -- WCT units - stb/stb
    0  0.4  0.8  /
     
     
    -- GOR units - Mscf/stb
    400  820  2000  /
     
     
    -- ' ' units - 
    0 /
    Je vous enverrai le script aussi si necessaire....

    Merci d'avance pr l'aide...

    Cdt,
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Tu peux travailler avec les range de awk et stocker les blocs de texte dans un tableau indicé par l'ordre d'impression.

    Soit en utilisant les n° de lignes pour définir les blocs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NR==7,NR==13 {_in[1]=_in[1] $0 RS}
    NR==3,NR==6{_in[2]=_in[2] $0 RS} 
    NR==15,NR==19{_in[3]=_in[3] $0 RS}
    NR==1,NR==2{_in[4]=_in[4] $0 RS}
    END{for(i=1;i<=4;i++) print _in[i]}
    Soit par mot-clé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /-- LIQ/,/^\// {_in[1]=_in[1] $0 RS}
    /-- THP/,/\// {_in[2]=_in[2] $0 RS} 
    /-- WCT/,/\// {_in[3]=_in[3] $0 RS}
    /-- \47/,/\// {_in[4]=_in[4] $0 RS}
    END{for(i=1;i<=4;i++) print _in[i]}
    Note: \47 est l'octal de '

  5. #5
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Awk n'est pas exactement un "script permettant de faire des manip sur les formats des fichiers". Il s'agit plutôt d'un langage permettant de traiter des fichiers lignes par ligne, aussi, pas étonnant qu'il ne soit pas complètement conçu pour faire des tris après coup.

    Je ne connais pas suffisamment pour me prononcer sur la solution de ripat, mais en tout cas, perl permettrait très facilement de faire ce genre de traitement (si tant est qu'il ne fasse pas plusieurs giga auquel cas, un peu d'optim serait nécessaire) : il suffirait de lire le fichier en entrée, de stocker dans une table de hashage la clé que tu souhaites trier associée au texte, et de ressortir le tout dans l'ordre des clés.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Citation Envoyé par Alek-C Voir le message
    Je ne connais pas suffisamment pour me prononcer sur la solution de ripat, mais en tout cas, perl permettrait très facilement de faire ce genre de traitement (si tant est qu'il ne fasse pas plusieurs giga auquel cas, un peu d'optim serait nécessaire) : il suffirait de lire le fichier en entrée, de stocker dans une table de hashage la clé que tu souhaites trier associée au texte, et de ressortir le tout dans l'ordre des clés.
    C'est très exactement ce que fait mon code awk. Il reste à voir maintenant comment l'intégrer dans le reste du code. Ici, pour l'exemple, j'imprime dans le bon ordre en fin de lecture de fichier mais il est possible de l'imprimer où l'on veut dans le flux de sortie désiré.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/09/2010, 13h40
  2. Réponses: 11
    Dernier message: 01/08/2006, 05h15
  3. [QuickReport] Comment imprimer dans CLX
    Par kase74 dans le forum EDI
    Réponses: 3
    Dernier message: 01/09/2005, 17h44
  4. [Print]Comment imprimer le texte d'une Jframe???
    Par greg3105 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/04/2005, 19h47
  5. [CR] Comment imprimer dans le bon ordre
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 18/05/2004, 11h11

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