Contenu | Rechercher | Menus

Annonce

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 12/07/2014, à 09:36

Postmortem

[Résolu] Générer une suite de x lettres

Bonjour tout le monde !

En bash, je cherche à générer une suite de cette forme :
TOTO001A1
TOTO001B1
TOTO001C1
TOTO001D1
TOTO001E1

Je voudrais que chaque valeur soit l'élément d'un tableau, sachant que je connais au départ le 1er élément mais le nombre d'éléments est demandé à l'utilisateur :

Actuellement, je fais ainsi mais je trouve ça un peu tiré par les cheveux et je me dis qu'il y a plus simple :

var[1]=TOTO001A1
read -p 'Entrer un nombre : ' nb
for (( i=2; i<=nb; i++ ))
do
   var[i]="${var[1]::-2}$(tr 'A-Y' 'B-Z' <<< "$(cut -c 8 <<< "${var[i-1]}")")${var[1]: -1}"
   echo "${var[i]}"
done

Merci d'avance !

Dernière modification par Postmortem (Le 12/07/2014, à 16:44)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#2 Le 12/07/2014, à 10:04

Watael

Re : [Résolu] Générer une suite de x lettres

salut,

avec un tableau supplémentaire

#!/bin/bash
lettres=( {A..Z} )
var[1]=TOTO001A1
read -p 'Entrer un nombre : ' nb
for (( i=2; i<=nb; i++ ))
do
   var[i]="${var[1]::-2}${lettres[nb]}${var[1]: -1}
done

pourquoi ne pas commencer ton tableau avec l'indice par défaut (zéro) ?

Dernière modification par Watael (Le 12/07/2014, à 10:05)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 12/07/2014, à 10:36

Postmortem

Re : [Résolu] Générer une suite de x lettres

Merci Watael ! Tu sais quoi, au vu de tes messages, je me doutais bien que si tu passais par là, tu me trouverais un truc full bash.
Je commence le tableau à l'indice un car l'indice me sert en même temps que sa valeur, et dans les fichiers que je vais traiter, l'indice commence à un.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#4 Le 12/07/2014, à 10:58

credenhill

Re : [Résolu] Générer une suite de x lettres

hello

$ read a; t=($(bash -c "echo x TOTO001{A..$(awk -v a=$a 'BEGIN {printf "%c}\n", a+64}')1") )
6
$ echo ${#t[@]}
7
$ echo ${t[1]}
TOTO001A1
$ echo ${t[6]}
TOTO001F1

j'utilise awk, parce qu'en bash printf "%c" 65 n'affiche pas un A, mais il y a peu être un moyen

Dernière modification par credenhill (Le 12/07/2014, à 10:59)

Hors ligne

#5 Le 12/07/2014, à 16:44

Postmortem

Re : [Résolu] Générer une suite de x lettres

C'est pas mal aussi, je mets ça de côté.
Merci à vous 2 smile


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 13/07/2014, à 10:02

pingouinux

Re : [Résolu] Générer une suite de x lettres

Bonjour,
Peut-être pas très élégant, mais concis :

$ var=( TOTO001{A..Z}1 ); read nb; var=( "${var[@]::$nb}" )
5

$ for k in "${var[@]}";do echo "$k";done
TOTO001A1
TOTO001B1
TOTO001C1
TOTO001D1
TOTO001E1

Hors ligne

#7 Le 13/07/2014, à 12:46

Postmortem

Re : [Résolu] Générer une suite de x lettres

C'est pas mal aussi, merci pingouinux.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne