[Linux - Bash] organiser un groupe de lettres par ordre ALPHA

organiser un groupe de lettres par ordre ALPHA [Linux - Bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 22-12-2010 à 18:46:10    

Bonjour,
 
Voici ma question j'ai un groupe de lettre, une chaine de caractère quelconque, contenu dans une variable.
Je souhaite supprimer les lettre en doublon dans cette chaine de caractère et l'organiser par ordre alphabétique, au passage je les passes en majuscule.
Exemple :

Code :
  1. popo="[Une Chaine]"
  2. popo=`echo $popo | tr '[:lower:]' '[:upper:]'` (popo="[UNE CHAINE]" )
  3. popo= .... le traitement qui va bien ->
  4. -> ... et en sorti de  tout ça :
  5. popo="ACEHINU[]" (par exmple)


 
le but est de traiter des chaines de caractère entrée par des utilisateurs qui peuvent faire des inversions de lettre (exemple : chaine = cahine), ou qui oublient de doubler des lettre (exemple : affichage = afichage).
 
Les chaines en question correspondent à des entités de ma société et certains admin, lorsqu'ils renseignent la base, sont peut regardant sur l'orthographe. Je n'ai pas la main sur le mode d'entrée des infos dans la base (un serveur Exchange pour le champs "Société" ). Je bosse à partir d'extract au format CSV que me fournis notre fournisseur de service Exchange (le serveur n'est pas en interne) et que j'insert dans ma base MySQL via des script shell (bash).
 
Au final je veux vérifier que l'admin à rentré le bon nom d'entité, en le comparant au contenu d'une table fixe que j'ai moi-même renseigné, tout en excluant les fautes possibles.
Pour moi que l'admin est entre "Societe" ou "Soicete" dois revenir au même (CEIOST) et si donc ça correspond je lui affect l'ID de l'entité correspondante.
 
Merci d'avance.
Nicolas

Reply

Marsh Posté le 22-12-2010 à 18:46:10   

Reply

Marsh Posté le 22-12-2010 à 18:57:09    

Tu peux commencer par regarder les commandes "sort" et "uniq".
 
Ensuite pour tes histoires de typo c'est un poil plus compliqué à faire.


Message édité par regexp42 le 22-12-2010 à 18:57:52
Reply

Marsh Posté le 23-12-2010 à 11:47:29    

Ok je vais déjà essayer avec ça merci.

Reply

Marsh Posté le 28-12-2010 à 11:34:06    

Bon, j'ai essayé mais je me suis pris la tête un moment sans réussir à obtenir le résultat escompté.
 
Nicolas

Reply

Marsh Posté le 30-12-2010 à 19:14:07    

tiré de là :

echo “teststring” | grep -o . | sort -n |tr -d ‘\n’; echo


http://www.adamsinfo.com/bash-shel [...] betically/
 
ça éclate la chaine, la trie avec sort et la recombine.


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 03-01-2011 à 10:07:13    

Un grand merci !

Reply

Marsh Posté le 03-01-2011 à 11:56:53    

Mjules a écrit :

tiré de là :

echo “teststring” | grep -o . | sort -n |tr -d ‘\n’; echo


http://www.adamsinfo.com/bash-shel [...] betically/
 
ça éclate la chaine, la trie avec sort et la recombine.


 
 
J'ai addapté et voici comment je m'en sert :
 


fonc_reorg_char () {
 various_char=`echo "$1" | sed 's/ //g' | grep -o . | sort -u | tr '[:lower:]' '[:upper:]'`
 for CHAR in $various_char; do  
  case $CHAR in  
   "[" ) echo "" ;;
   "]" ) echo "" ;;
   "(" ) echo "" ;;
   " )" ) echo "" ;;
   "{" ) echo "" ;;
   "}" ) echo "" ;;  
   *)  echo $CHAR;;
  esac
 done
}


 
Et je compare le résultat avec le mot que j'ai en base.
 
Encore merci du coup de main !


Message édité par Nicolas_83 le 03-01-2011 à 11:59:02
Reply

Marsh Posté le 04-01-2011 à 16:56:08    

Petite mise à jour de mon code.
 
je viens de trouver cette "commande" qui me simplifie grave la vie, pourquoi je l'ai pas trouvé plus tôt -_- :
 


> echo "Nom Prenom [SOCIETE]" | awk -F"[[:punct:]]" '{ print $2 }'
> SOCIETE
 
fonc_reorg_char () {  
 various_char=`echo "$1" | sed 's/[\.-]//g' | grep -o . | sort -u | tr '[:lower:]' '[:upper:]'`  
 done  
}  
> fonc_reorg_char "SOCIETE"
> CEIOST
 


 
l'expression "générale" [:punct:] permet de sélectionner les caractères de ponctuation "([-.! ...."

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed