[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Linux-31] Remplacer des lettres par des nombres avec tr



Le vendredi 06 mars 2020 à 07:50 +0100, jpcas a écrit :
> Salut,
> 
> Un truc comme ça ?
Effectivement, ça marche !

Il y a quelques passages que je n'ai réussi à comprendre.
> 
> 
> $ cat foo.sh
> #! /bin/bash
> #set -xv
> 
> tab='abcdefghijklmnopqrstuvwxyz'
> 
> for i in ${@}
> do
Jusqu'ici, tout va bien.

> 	L="${tab%${i}*}"
Ici, on définit une variable L à partir des variable i et tab? L'idée
est de garder la liste des premières lettres jusqu'à i-1 (par exemple
pour r, on s'arrête à q), c'est bien ça ?
Par contre, j'ai pas réussi à comprendre ça fonctionne dans le
détail... (% n'a rien à voir avec modulo je suppose)


> 	R="${#L}"
Ici, j'imagine qu'on compte le nombre de caractères. Mais comment?...


> 	((R++))
On rajoute un pour compenser le i-1
> 	printf "${R} "
Et ici on affiche le résultat.

> done
> 
> Ce qui donne :
> 
> $ ./foo.sh a n d z t
> 1 14 4 26 20
En effet.
> 
> On doit pouvoir faire encore plus simple avec un tableau, mais c'est
> pas
> mon truc ;-)
Jocker :-)
Merci en tout cas.
Claude

> 
> @+
> JP
> 
> 
> Le 04/03/2020 à 23:35, Claude MICOUIN (via linux-31 Mailing List) a
> écrit :
> > Bonsoir la liste,
> > Je cherche à remplacer chaque lettre d'un fichier par leur numéro
> > d'ordre dans l'alphabet: 
> > a -> 1
> > b -> 2
> > etc.
> > 
> > Ça marche très bien jusqu'à 9 avec la commande tr
> > $ echo 'b f a i c h' |tr "[a-k]" "[0-9]"
> > 1 5 0 8 2 7        
> > 
> > Mais ça se gâte dès qu'on arrive à un nombre à deux chiffres:
> > $ echo 'b f a i c h' |tr "[a-z]" "[0-26]"
> > 1 ] 0 ] 2 ]
> > 
> > J'ai essayé de changer les " pour des ' dans tous les sens, aucun
> > résultat.
> > Quelqu'un saurait où ça foire ?
> > Merci.
> > Bonne soirée.
> > Claude MICOUIN
> > 
> 
>