Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2021, à 22:48

Tawal

Parser une donnée dans plusieurs noms de variable

Hello,

Je me demande comment affecter les champs d'une variable (ou d'un retour de commande) dans différents noms de variables.
Par exemple :
Soit une variable contenant :

nom | adresse | tel | mail

La méthode que j'utilise est :

nom="$(awk -F "|" '{print $1}')"
adresse= ...

J'ai bien pensé à utiliser un tableau mais Tab[0]=nom Tab[1]=adresse  ... n'est pas très lisible dans le script.

Comment feriez-vous ?

En vous remerciant.


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#2 Le 21/04/2021, à 00:58

beuguissime

Re : Parser une donnée dans plusieurs noms de variable

Bonsoir,

Parser… tssk… Analyser syntaxiquement, c'est pas plus clair ? big_smile

Blague à part, est-ce que la fonction primitive mapfile de bash te conviendrait ?

$ help mapfile
mapfile: mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
    Read lines from the standard input into an indexed array variable.
    
    Read lines from the standard input into the indexed array variable ARRAY, or
    from file descriptor FD if the -u option is supplied.  The variable MAPFILE
    is the default ARRAY.
    
    Options:
      -d delim	Use DELIM to terminate lines, instead of newline
      -n count	Copy at most COUNT lines.  If COUNT is 0, all lines are copied
      -O origin	Begin assigning to ARRAY at index ORIGIN.  The default index is 0
      -s count	Discard the first COUNT lines read
      -t	Remove a trailing DELIM from each line read (default newline)
      -u fd	Read lines from file descriptor FD instead of the standard input
      -C callback	Evaluate CALLBACK each time QUANTUM lines are read
      -c quantum	Specify the number of lines read between each call to
    			CALLBACK
    
    Arguments:
      ARRAY	Array variable name to use for file data
    
    If -C is supplied without -c, the default quantum is 5000.  When
    CALLBACK is evaluated, it is supplied the index of the next array
    element to be assigned and the line to be assigned to that element
    as additional arguments.
    
    If not supplied with an explicit origin, mapfile will clear ARRAY before
    assigning to it.
    
    Exit Status:
    Returns success unless an invalid option is given or ARRAY is readonly or
    not an indexed array.

Dernière modification par beuguissime (Le 21/04/2021, à 00:58)

Hors ligne

#3 Le 21/04/2021, à 01:44

Watael

Re : Parser une donnée dans plusieurs noms de variable

tableau associatif :

$ var="nom | adresse | tel | mail"
$ declare -A tabloAsso
$ IFS='|' read tabloASso[nom] tabloAsso[adresse] tabloASso[tel] tabloASso[mail] <<<"$var"

/!\ttention : les tableaux associatifs étant hashés ils ne sont pas triés.
donc, un for i in "${tabloAsso[@]}" est imprédictible. sad


Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 21/04/2021, à 10:53

Tawal

Re : Parser une donnée dans plusieurs noms de variable

Désolé pour mon anglicisme.

Je pensais bien à mapfile/readarray  quand je parlais de tableau.
Je crois que la solution de Watael me convient mieux.
Même si elle renferme quelques pièges.
Merci de l'avertissement quand à quant à l'ordre dans les tableaux associatifs.

Au plaisir.

Dernière modification par Tawal (Le 21/04/2021, à 14:37)


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#5 Le 21/04/2021, à 12:38

Watael

Re : Parser une donnée dans plusieurs noms de variable


Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 21/04/2021, à 13:29

diesel

Re : Parser une donnée dans plusieurs noms de variable

Watael a écrit :

Bertrand ?

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#7 Le 21/04/2021, à 14:36

Tawal

Re : Parser une donnée dans plusieurs noms de variable

Oups roll corrigé, merci
Bertrand ? Non, un quanta de perfection big_smile


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#8 Le 21/04/2021, à 14:57

beuguissime

Re : Parser une donnée dans plusieurs noms de variable

Un quantum, des quanta. tongue

Hors ligne