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 avec la commande awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut problème avec la commande awk
    Bonjour, j'ai un fichier qui a 6 colonnes. je veux diviser par deux toutes les colonnes, excepté la première. Voici mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/sh
     
    N=2
    awk '{print $1,$2/$(N),$3/$(N),$4/$(N),$5/$(N),$6/$(N)}' toto > titi
    et j'obtiens le message suivant :

    awk: (FILENAME=toto FNR=23201) Fatal: tentative de division par zéro
    en revanche, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/sh
    awk '{print $1,$2/2,$3/2,$4/2,$5/2,$6/2}' toto > titi
    tout marche très bien. Pourquoi ?

    Enfin, comment faire en utilisant une boucle for ? Mes tentatives sont sans grands succes...

    Merci.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    rien de plus normal ton N est une variable du shell et tu l'utilise dans ton awk c'est normal que awk ne la connaisse pas et provoque une division par zéro

    tu dois integrer le contenu de N à awk lorsque tu l'appeles...
    voilà comment faire trouvé sous google :
    Using-Shell-Variables.html

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par frp31
    rien de plus normal ton N est une variable du shell et tu l'utilise dans ton awk c'est normal que awk ne la connaisse pas et provoque une division par zéro

    tu dois integrer le contenu de N à awk lorsque tu l'appeles...
    voilà comment faire trouvé sous google :
    Using-Shell-Variables.html
    OK, merci ça marche. Voici mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/bin/sh
     
    N=2
     
    sed 's/\./,/g' Mean.txt > toto
    awk -v val=$N '{printf("%f",$1);for(i=2;i<=NF;i++) printf("\t%10e",$i/val); printf("\n")}' toto > titi
     
    sed 's/,/\./g' titi > tata
    mv tata Mean.txt
    rm -f toto titi

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tu peux te dispenser de fichiers temporaires en utilisant les redirections...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/sh
     
    N=2
     
    sed 's/\./,/g' Mean.txt | awk -v val=$N '{printf("%f",$1);for(i=2;i<=NF;i++) printf("\t%10e",$i/val); printf("\n")}' | sed 's/,/\./g' > tata
    mv tata Mean.txt
    [/quote]
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    ah oui, c'est bien mieux. Merci.

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

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. Problème avec la commande sed
    Par JUSTIN Loïc dans le forum Linux
    Réponses: 2
    Dernier message: 05/09/2006, 10h17
  3. Problème avec la commande nice
    Par ShadoX dans le forum Administration système
    Réponses: 2
    Dernier message: 08/08/2006, 18h59
  4. Problème avec la commande revoke sous oracle
    Par merlubreizh dans le forum Oracle
    Réponses: 19
    Dernier message: 28/04/2006, 15h02
  5. [C++] Problème avec la commande "make"
    Par quantik-revolution dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 02/04/2006, 18h17

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