Lire chaque mot d'une ligne [Résolu/Fermé]

Signaler
-
 lanulledu28 -
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


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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
35936
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
4 décembre 2020
5 706
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

$ 

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.
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 ...
Messages postés
35936
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
4 décembre 2020
5 706
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 ;-\
Avec cette ligne je souhaite mettre les variables telque
Nom = Dupond
Prénom=Gerard
Age =23

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?
Messages postés
35936
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
4 décembre 2020
5 706
$ 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 = 


$

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
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 114
à moins que le contenu possible de chaque champ soit connu
Messages postés
35936
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
4 décembre 2020
5 706
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 
Utilisateur anonyme
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
Messages postés
35936
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
4 décembre 2020
5 706
Les billes, alors!
On risque de tourner en rond ;-))
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 114
et mettre des biles dans une variable, dur, dur ...
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 114
hello
pour savoir qu'à la ligne 2 il y a un champ vide (status) après manuel, il faudrait une variable vide ""
Mouais je pense que je vais tester chaque variable l'une autre l'autre..... :/
j'allais oublier mais merci à tous de m'avoir aider.