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 :

Script Bash : Utilisation de awk dans une bouble for


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Par défaut Script Bash : Utilisation de awk dans une bouble for
    Bonjour à tous,

    Je dois exécuter plusieurs un fichier et avant chaque exécution je dois charger un jeux de paramètres différents.

    Pour cela, j'utilise un script bash et un fichier texte qui contient ligne par ligne les paramètre de je veux charger.

    Le fichier texte (test.txt) :
    1 11 21 31
    2 12 22 32
    3 13 23 33

    Avec mon script Bash je souhaite lire ce fichier texte ligne par ligne. A chaque fois que je lis une ligne, je charge les paramètres qui sont distribués en colonne dans le fichier texte les uns après les autres.

    Ensuit j'exécute mon programme et je répète cela jusqu'à la dernière ligne de mon programme. Voici le script que j'utilise :

    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
     
    #!/bin/bash
     
    set -a Param
     
    while read ligne           
    do      
            NbCol=$(echo $ligne | awk '{print NF}')
     
    	for (( i=1; i <= $NbCol; i++ ))
    	do
    		Param[$i]=$(echo $ligne | awk '{print $i}')  
    	        export Param[$i]
                    echo ${Param[$i]}
    	done
     
            #Ici : Le programme à exécuter
     
    done <test.txt 
     
    exit0
    J'ai souci avec l'utilisation de ma variable d'itération $i avec awk.
    Normalement je devrais avoir pour la première ligne :
    Param[1] = 1
    Param[2] = 11
    Param[3] = 21
    Param[4] = 31

    Mais j'obtiens :
    Param[1] = 1 11 21 31
    Param[2] = 1 11 21 31
    Param[3] = 1 11 21 31
    Param[4] = 1 11 21 31

    Quelqu'un peut-il m'aider?

  2. #2
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while read -a tableau
    do
    #  affichage du tableau a fin de débuggage.
       for i in ${!tableau[@]}
       do
          echo "\${tableau[$i]} = ${tableau[i]}"
       done
     
       export tableau
    #  exécution du programme
    done < fichier
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    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
    Bonjour.

    Solution bien inférieure à celle de N_BaH, juste pour que tu comprennes ton erreur:

    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
     
    #!/bin/bash
     
    set -a Param
     
    while read ligne           
    do      
            NbCol=$(echo $ligne | awk '{print NF}')
     
    	for (( i=1; i <= $NbCol; i++ ))
    	do
    		#Param[$i]=$(echo $ligne | awk '{print $i}')  
    		Param[$i]=$(echo "$ligne" | awk "{print \$$i}")  
    	        #export Param[$i]  # ????? Ouate de phoque?
                    echo ${Param[$i]}
    	done
     
            #Ici : Le programme à exécuter
     
    done <test.txt 
     
    exit0

  4. #4
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Il y a plus simple je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk '{  system("MA COMMANDE OPTIONS " $2" OPTIONS " $3);   }' fichier_params.txt

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

Discussions similaires

  1. Utilisation de SET dans une boucle FOR
    Par GBardou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2012, 00h54
  2. Utilisation de condition dans une boucle for-each
    Par siro1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/03/2012, 17h07
  3. [Débutant] utilisation des Textbox dans une boucle For
    Par zayoub dans le forum VB.NET
    Réponses: 31
    Dernier message: 28/07/2011, 15h55
  4. Utiliser un pas dans une boucle For .. to .. do
    Par colorid dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2009, 11h09
  5. Réponses: 3
    Dernier message: 11/03/2004, 10h58

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