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 : aggregation de données


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
    Mai 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Mai 2008
    Messages : 217
    Par défaut awk : aggregation de données
    Bonjour,

    J'avais déjà eu un problème pour aggréger des données mais là le problème est quelque peu différent :

    J'ai un fichier avec plusieurs données dont je ne veux prendre que 4 données. Pour ceci j'utilise la commande pour les sélectionner afin d'avoir un fichier comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    begin
    pack_batch.truc("machin","mois"...);
    end;
    /
    exit;
    Dans le fichier de données, il peut y avoir des doublons donc je voudrais aggégrer les lignes mais le soucis que j'ai c'est qu'il y a une variable a mettre dans le fichier sql qui ne vient pas du fichier de donnée : mois_ref
    Voici ce que j'ai pour commande awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    awk -F";" -v mr=$MOIS_REF '\
            BEGIN {print "begin\n"}\
            {\
            sub(/(\047)/,"\047||Chr(39)||\047",$16);\
            sub("&","\047||Chr(38)||\047",$16);\
            _1[$15 ";" mr ";" $16 ";" $47 ";" $65]
            }\
            END {\
            for (i in 5) printf("pack_batch.CreerEmetteurFiliales(%s);\n",i)
                print "end;\n/\nexit\n";\
            }' $FICTRAITE > $TMPCREEEMET
    J'ai cette erreur là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    syntax error The source line is 9.
     The error context is
                            for (i in >>>  5 <<< ) printf("pack_batch.CreerEmetteurFiliales(%s);\n",i)
     awk: The statement cannot be correctly parsed.
     The source line is 9.
     awk: The statement cannot be correctly parsed.
     The source line is 10.
     Erreur a la generation des emetteurs manquants
    Quelqu'un peut-il m'aider?

    Merci d'avance,

  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
    C'est bon j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    awk -F";" -v mr=$MOIS_REF '\
            BEGIN {print "begin\n"}\
            {\
            sub(/(\047)/,"\047||Chr(39)||\047",$16);\
            sub("&","\047||Chr(38)||\047",$16);\
            _1[$15 ";" mr ";" $16 ";" $47 ";" $65]
            }\
            END {\
            for (i in _1) printf("pack_batch.CreerEmetteurFiliales(%s);\n",i)
                print "end;\n/\nexit\n";\
            }' $FICTRAITE > $TMPCREEEMET

  3. #3
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    Tant mieux si tu as pu trouver ton erreur. J'ai plusieurs remarques sur le code que tu as posté:

    • Les '\' en fin de ligne sont inutiles. il n'y a, à ma connaissance, qu'entre BEGIN et '{' qu'il ne faut pas mettre de retour à la ligne. Ainsi qu'entre END et '}'.
    • Le caractère ';' est un séparateur lorsqu'il y a plusieurs commandes sur la même ligne, ce n'est pas un terminateur. Ceux en fin de ligne peuvent être supprimés.
    • Je ne connais pas le tableau _1. Peux-tu expliquer ce que c'est?

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

Discussions similaires

  1. Aggreger des données fonction aggregate ?
    Par charlotte77 dans le forum R
    Réponses: 3
    Dernier message: 28/10/2013, 20h49
  2. Réponses: 8
    Dernier message: 23/09/2008, 11h20
  3. Agrégation des données avec awk
    Par miketidy dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/06/2008, 07h50
  4. Commande AWK ou SED pour modification données dans fichier
    Par desbrandesq dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 17h56
  5. Réponses: 3
    Dernier message: 18/07/2007, 17h20

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