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 :

[Bash] Exécution d'un script awk en texte


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut [Bash] Exécution d'un script awk en texte
    Bonjour,

    Je suis sur un problème en ce moment, j'essaie d’exécuter une commande AWK passer en argument d'une fonction. Un petit exemple s'impose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var="awk '.....' | "
     
    for Fichiers In Source
                 var cmd1(Fichiers)
    Ici le problème c'est que le awk se lance mais ne fait rien (j'ai un prompt avec marquer AWK)

    Si vous avez des idées je suis preneur.

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur Systèmes et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur Systèmes et Réseaux

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Bonjour,

    Je pense que tu veux exécuter du bash et je suppose que tu veux mettre le résultat d'une commande dans une variable ?

    Si c'est le cas, il faut faire ainsi :
    Sinon précise un peu plus.

    Tu veux créer une fonction qui fait un awk sur les fichiers que tu passe en argument ?

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

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

    Citation Envoyé par la_fouine1806
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var="awk '.....' | "
     
    for Fichiers In Source
                 var cmd1(Fichiers)
    à part l'affectation de la variable, ici, rien ne fait quoi que ce soit !

    est-ce qu'on peut balancer "du code", ou ce qui y ressemble, et demander une solution ?

    Citation Envoyé par la_fouine1806
    Si vous avez des idées je suis preneur.
    entre autres: lire les tutos qui figurent dans ma signature !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Ok je vais préciser parce que si j'utilise la façon d'appeler mon awk fait planté mon truc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    traitement_1[1]="dos2unix"
    traitement_2[1]=$(awk -f /home/data/script)
    traitement_3[1]=iconv -f iso-9001 -t  UTF-8 
     
    for Fichiers In Dossier
    traitement_1[1] ${Fichiers}|traitement_2[1]|traitement_3[1]|chargement du fichier en base.
    il ne veut pas exécuter le programme... (un peu comme une boucle infini)

    Si je mets
    traitement_2[1]=$("awk -f /home/data/script")
    La je vois qu'il fait le dos2unix par contre après rien du tout et tout est mis en table d'erreur.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    la mise en variables de commandes pour ensuite les exécuter en les appelant via autant de variables n'a aucun intérêt.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Perso je vois un intérêt, car si je la tape à la main je peux pas appliquer mon traitement à la main apres je t'avoue que traitement 2 et 3 je pourrais les mutualisés... mais c'est un autre débat...

    ici mon problème est de laisser à la main mon script a un autre et qu'il puisse s'en servir sans tout recoder.
    Je m'explique.

    Mon script se découpe en 3. Un fichier de paramètrage ( qui ne demande pas connaissance en info), un fichier de fonction (qui demande des connaissances informatique) et un lanceur.

    je veux que la personne soit capable si elle le souhaite ajouter des prétraitements comme des iconv, des scripts awk, sed ou autre... sans pour autant modifier mon fichier de fonction.

    Voila pourquoi je passe des commandes en variables...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ça n'a pas d'intérêt car ça peut amener des complications.

    éventuellement, utilise des alias (mais ils ne prennent pas d'arguments), ou des fonctions.

    d'après ce que j'ai pu observer, les développeurs utilisent des variables pour mémoriser des commandes avec leurs chemins, c'est tout.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par la_fouine1806 Voir le message
    Bonjour,

    Je suis sur un problème en ce moment, j'essaie d’exécuter une commande AWK passéer en argument d'une fonction. Un petit exemple s'impose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var="awk '.....' | "
     
    for Fichiers In Source
                 var cmd1(Fichiers)
    Ici le problème c'est que le awk se lance mais ne fait rien (j'ai un prompt avec marquer AWK)

    Si vous avez des idées je suis preneur.

    Cordialement
    Je pense avoir compris ce que tu veux faire...

    Il y a 2 possibilités:
    soit l'utilisateur tape les pipes
    soit ils sont intégrés dans les variables

    Dans tous les cas, contrairement à ce qui avait été dit dans les premières réponses (probablement parce que les spécifications n'étaient pas encore très claires), il ne faut surtout pas utiliser var=$(...) car l'évaluation a lieu trop tôt (à l'affectation de la variable, alors qu'on la souhaite lors de son utilisation).

    Si l'utilisateur tape les pipes, tu peux faire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var="awk '.....'"
     
    for Fichier In ${Source}
    do cat ${Fichier} | ${var}
    done
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    traitement_1[1]="dos2unix"
    traitement_2[1]="awk -f /home/data/script"
    traitement_3[1]="iconv -f iso-9001 -t  UTF-8"
     
    for Fichiers In Dossier/*
    do ${traitement_1[1]} ${Fichiers} | ${traitement_2[1]} | ${traitement_3[1]} | chargement du fichier en base.
    done
    Si tu souhaites que l'utilisateur n'ait pas à taper les pipes, c'est plus compliqué parce qu'il faut utiliser the evil eval en gérant subtilement les guillemets et apostrophes, avec quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var1="awk '.....' |"
     
    for Fichier In ${Source}
    do eval "cat ${Fichier} ${var1} ${var2}"
    done
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    traitement_1[1]="dos2unix"
    traitement_2[1]=" | awk -f /home/data/script"
    traitement_3[1]=" | iconv -f iso-9001 -t  UTF-8"
     
    for Fichiers In Dossier/*
    do eval "${traitement_1[1]} ${Fichiers} ${traitement_2[1]} ${traitement_3[1]} | chargement du fichier en base."
    done

Discussions similaires

  1. Correction Script bash : Exécution et recevoir le test par log ainsi email
    Par hackmed dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 14/05/2015, 04h07
  2. Réponses: 0
    Dernier message: 18/10/2013, 13h32
  3. Initialiser une variable bash dans un script awk
    Par TomRay dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 08/01/2011, 18h25
  4. Réponses: 8
    Dernier message: 27/07/2006, 09h40

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