Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1838 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1257382
Nicolas_83
Posté le 22-12-2010 à 18:46:10  profilanswer
 

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

mood
Publicité
Posté le 22-12-2010 à 18:46:10  profilanswer
 

n°1257388
regexp42
Eplucheur de RFC.
Posté le 22-12-2010 à 18:57:09  profilanswer
 

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
n°1257527
Nicolas_83
Posté le 23-12-2010 à 11:47:29  profilanswer
 

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

n°1258117
Nicolas_83
Posté le 28-12-2010 à 11:34:06  profilanswer
 

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

n°1258331
Mjules
Modérateur
Parle dans le vide
Posté le 30-12-2010 à 19:14:07  profilanswer
 

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.
n°1258505
Nicolas_83
Posté le 03-01-2011 à 10:07:13  profilanswer
 

Un grand merci !

n°1258533
Nicolas_83
Posté le 03-01-2011 à 11:56:53  profilanswer
 

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
n°1258903
Nicolas_83
Posté le 04-01-2011 à 16:56:08  profilanswer
 

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 "([-.! ...."


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
bug linux ou carte graphique package apache White Box Enterprise Linux release 4
Quel format de fichier pour Linux et MacOSX 10.2 pour disque externe ?plafonner le volume sonore (Linux)
Linux : swap utile avec 4 Go de RAM ?[REGLE] bash: ./jext: Permission non accordée
[Débat] Formulation des questions et accès à la documentation sous GNU/Linux[Linux] - Trouver des fichiers qui n’appartiennent pas à des users
[bash-expect] Redirection de port automatique avec SSH 
Plus de sujets relatifs à : [Linux - Bash] organiser un groupe de lettres par ordre ALPHA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR