Lire chaque mot d'une ligne

Résolu
Bonjour,

Je suis novice et je cherche un peu d'aide.
Je souhaite lire chaque mot d'une ligne d'un fichier pour le mettre dans une variable.
Par exemple,
dans le fichier Toto :
ligne=tutu titi 123 tata 251 144 

Et je voudrais : 
var1 = tutu
var2=titi
....

J'utilise la fonction sur ma ligne (que j'ai deja extraite)
var1 = 'ligne|gawk -F" " '{print $1}'


et voudrais plutôt utiliser sfift car j'ai pas mal de mot sur la ligne.

merci de vos reponses

10 réponses

  1. je pense que je vais tester chaque variable l'une autre l'autre
    Bon courage!

    J'insiste: tu devrais construire le fichier de données avec un séparateur (que ce soit une virgule, un point-virgule, une tabulation, ou autre chose).
    2
    1. Contributeur
      Salut,

      Utilise un tableau plutôt, non ?

      $ ligne=( tutu titi 123 tata 251 144 )
      
      $ echo ${ligne[*]}
      tutu titi 123 tata 251 144
      
      $ echo ${#ligne[*]}
      6
      
      $ echo ${ligne[0]}
      tutu
      
      $ echo ${ligne[2]}
      123
      
      $ echo ${ligne[5]}
      144
      
      $ 

      0
      1. salut,

        Je souhaite lire chaque mot d'une ligne d'un fichier pour le mettre dans une variable.

        Ce n'est pas une stratégie viable.
        Tu vas être très embêté par la suite pour retrouver la bonne variable, et ça va amener une solution risquée.

        Utiliser un tableau peut être une solution, mais est-ce vraiment utile ?

        Sans en savoir plus, je ne peux pas en dire davantage.
        0
        1. Oui pour mettre chaque variable a la bonne place ça risque d'être tendu.

          Une ligne est structurée de la façon suivante :
          Nom1 Prenom1 Age Année_Naissance Date_Abonnement Type_Abonnement Status(optionnel) 1111  Magazine Numéro_Magazine 
          
          ce qui donne : 
          Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2 
          
          Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
          
          


          Un tableau peut être problématique car le nombre de variable n'est pas fixe ...
          0
          1. Contributeur
            Si tu nous disais ce que tu comptes faire exactement, peut être pourrions-nous t'aider au mieux, parce que là c'est un peu confus ;-\
            0
          2. Avec cette ligne je souhaite mettre les variables telque
            Nom = Dupond
            Prénom=Gerard
            Age =23
            0
        2. Un tableau peut être problématique car le nombre de variable n'est pas fixe ...

          #1- construire correctement le fichier de données : CSV? champs de longueurs fixes?
          0
          1. Contributeur
            $ cat plop 
            Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2 
            Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
            
            $ cat foo.sh 
            #!/bin/bash
            
            while read Nom Prenom Age Anniv Abon Type Status Ref Mag NumMag
            do
            echo "
            Nom = ${Nom}
            Prénom = ${Prenom}
            Age = ${Age}
            Date de Naissance = ${Anniv}
            Date d'abonnement = ${Abon}
            Type d'abonnement = ${Type}
            Status = ${Status}
            Référence = ${Ref}
            Magazine = ${Mag}
            Numéro de magazine = ${NumMag}
            "
            done < plop
            
            $ ./foo.sh 
            
            Nom = Dupond
            Prénom = Gerard
            Age = 23
            Date de Naissance = 1990
            Date d'abonnement = 12/12/12
            Type d'abonnement = mensuel
            Status = impayé
            Référence = 1111
            Magazine = Sport
            Numéro de magazine = 2
            
            
            Nom = Martin
            Prénom = Paul
            Age = 35
            Date de Naissance = 1961
            Date d'abonnement = 12/12/11
            Type d'abonnement = mensuel
            Status = 1111
            Référence = Science
            Magazine = 5
            Numéro de magazine = 
            
            
            $

            0
            1. Effectivement je ne suis mal exprimé,

              En donnée brut j'ai plusieurs lignes telque
              ->Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2
              ->Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
              ->Durant 25 1955 12/12/12 hebdo 1111 Tricot 4 Musco 9

              malheureusement , les variables ne sont pas à la meme place pour chaque ligne.7Par exemple , après la variable Nom on peut lire soit Prenom soit directement l'age Age ,
              de meme pour status pour la deuxieme ligne tout est decalé.

              Tu obtient :
              Nom = Martin
              Prénom = Paul
              Age = 35
              Date de Naissance = 1961
              Date d'abonnement = 12/12/11
              Type d'abonnement = mensuel
              Status = 1111
              Référence = Science
              Magazine = 5
              Numéro de magazine =

              alors qu'il faudrait :

              Nom = Martin
              Prénom = Paul
              Age = 35
              Date de Naissance = 1961
              Date d'abonnement = 12/12/11
              Type d'abonnement = mensuel
              Status =
              Référence = 1111
              Magazine = Science
              Numéro de magazine = 5
              0
              1. Contributeur
                malheureusement , les variables ne sont pas à la meme place pour chaque ligne
                Alors c'est quasiment du domaine de l'impossible ;-((
                0
              2. Contributeur
                à moins que le contenu possible de chaque champ soit connu
                0
              3. Contributeur
                Oui pour certains, mais en ce qui concerne le champ "Prenom", sans compter les 4 derniers qui sont apparemment très aléatoire concernant l'ordre ;-\

                En donnée brut j'ai plusieurs lignes telque
                ->Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2
                ->Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
                ->Durant 25 1955 12/12/12 hebdo 1111 Tricot 4 Musco 9 
                0
              4. Le principe élémentaire d'un(e) fichier/base de données, c'est d'être organisé(e).
                Imaginez une feuille excel sans colonnes! un CSV sans séparateur! des longueurs fixes qui changent!

                Sinon, il reste les dés.. Ah ben non, les angles séparent les faces!
                Les billes, alors!
                XD
                0
              5. Contributeur
                Les billes, alors!
                On risque de tourner en rond ;-))
                0
            2. Contributeur
              hello
              pour savoir qu'à la ligne 2 il y a un champ vide (status) après manuel, il faudrait une variable vide ""
              0
              1. Mouais je pense que je vais tester chaque variable l'une autre l'autre..... :/
                0
                1. j'allais oublier mais merci à tous de m'avoir aider.
                  0