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 :

problème commande awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut problème commande awk
    Bonjour,

    Voilà j'ai une commande awk qui sélectionne des données pour les mettre dans un autre fichier qui sera ensuite executer à l'aide de sqlplus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    awk -F";" -v mr=$MOIS_REF '\
            BEGIN {print "begin"}\
            {\
            sub(/\&/,"\&",$16);\
            printf("pack_batch.CreerEmetteurFiliale(\047%s\047, \047%s\047, \047%s\047, \047%s\047, \047%s\047);\n", $15, mr, $16,
     $47, $65);\
            }\
            END {\
                print "end;\n/\nexit\n";\
            }' $FICTRAITE > $TMPCREEEMET
    Mon problème vient du fait que dans la variable $16, il y a parfois des libellé avec de & et ceci à l'exécution et vu comme une variable et donc il attend une valeur. Ma question est comment fait pour que ce & ne soit pas vu comme une variable.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Personne pour m'aider?

  3. #3
    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
    Normalement ton & devrait être vu par awk comme un simple caractère. Donne-nous un echantillon en entrée ainsi que la sortie souhaitée.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    bah en fait quand je vais voir dans le fichier ou ces données sont crée

    j'ai de lignes qui sont par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pack_batch.CreerEmetteurFiliale('125', '200805', 'machin & truc', '5568', '999222');
    Quand j'exécuter çà a partir de sqlplus, il me demande une valeur pour truc. Je ne comprend pas pourquoi le & est interprété comme une variable

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Personne ne trouve comment m'aider à résoudre ce fichu problème?

  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
    Ce n'est pas un problème awk mais sqlplus. Change le titre du post et mets-nous l'erreur générée par sqlplus. Je ne connais pas mais peut-être que quelqu'un pourra t'aider.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    ok, je vais mettre çà à la bonne place, par contre j'ai un autre soucis : je n'arrive pas à savoir comment faire avec la commande sub pour recherche un apostrophe dans une chaine de caractère et mettre un espace à la place

  8. #8
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gsub(/\'/" "/TaString);
    Devrait marcher, non ?

    [EDIT]
    Je ne sais pas si c'est le cas, mais si tu fais ça pour échaper la quote pour ton sql, tu peux simplement la doubler...
    SELECT 'l''apostrophe' FROM TaTable => l'apostrophe

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Merci Pacmann, je ne sais pas si ca marche je n'ai pas eu le temps de tester, j'ai trouvé un moyen pour l'instant qui contourne ce problème.

    J'ai un autre problème (et oui encore), comment voir avec sub que la donnée est vide ?

  10. #10
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Vide ? Genre que tu n'as rien remplacé ?

    => gsub renvoie le nombre de substitutions effectuées

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    C'est bon j'ai trouvé comment faire (enfin pour l'instant)

    J'ai une autre question peut-on à l'aide de la commande awk, agréger des données?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Help!!!

  13. #13
    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
    Que veux-tu dire? Fusionner des données, concaténer des chaînes? Donne un exemple complet.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Exemple j'ai un fichier

    x000;25
    x001;30
    x000;25

    Je veux qu'à l'affichage ca donne

    x000;50
    x001;30

    Besoin d'aide

  15. #15
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F";"  -v OFS=";" '{_a[$1]+=$2} END {for(i in _a) print i, _a[i]}' ton-fichier

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Merci beaucoup ca fonctionne, et comment je fait pour agréger par plusieurs données
    ex:

    x001;y001;z001;50;100;300
    x001;y002;z001;50;150;400
    x001;y001;z001;50;100;600
    x002;y001;z001;100;50;300

    cela donne :

    x001;y001;z001;100;200;900
    x001;y002;z001;50;150;400
    x002;y001;z001;100;50;300

    Merci d'avance

  17. #17
    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
    C'est ta dernière version?

    Même idée: utiliser les tableaux associatifs de awk pour calculer les sommes.

    fichier prog-awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN {FS=OFS=";"}
    {
            _4[$1 ";" $2 ";" $3]+=$4
            _5[$1 ";" $2 ";" $3]+=$5
            _6[$1 ";" $2 ";" $3]+=$6
    }
    END {for (i in _4) print i, _4[i], _5[i], _6[i]}
    Pour lancer le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -f prog-awk ton-fichier

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    Je crois que oui
    je vais tester

    Merci beaucoup

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    ca fonctionne mais il y a une ligne en trop qui traine voilà ce que j'obtiens :

    x002;y001;z001;100;50;300
    ;;;0;0;0
    x001;y001;z001;100;200;900
    x001;y002;z001;50;150;400

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut
    c'est bon ca fonctionne
    Un grand merci

    Le problème venait du vené que j'avais des lignes vide dans le fichiers

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème avec la commande awk
    Par etudiant-apprenant dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 10/11/2013, 16h08
  2. petit problème commande awk
    Par fbb53 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/05/2011, 16h24
  3. problème script et commande awk
    Par sajodia dans le forum Shell et commandes GNU
    Réponses: 17
    Dernier message: 30/05/2008, 09h16
  4. problème script et commande awk
    Par kiell dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/05/2008, 12h31
  5. problème avec la commande awk
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 05/06/2007, 13h02

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