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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  bash : extraction de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

bash : extraction de caractères

n°1113448
hfrfc
Bob c'est plus simple à dire..
Posté le 16-02-2009 à 11:49:11  profilanswer
 

Hello,
 
J'ai une liste de noms composés dont j'aimerais extraire les 1er caractères en bash.
 
Exemple : "marie-chantal" donne "mc", "jean-daniel" donne "jd".
 
J'ai bien trouvé une solution en utilisant 3 'cut' consécutifs, mais je me demande s'il existe plus élégant !! :)


---------------
D3/Hots/Hs Doc#2847
mood
Publicité
Posté le 16-02-2009 à 11:49:11  profilanswer
 

n°1113455
ph75
Posté le 16-02-2009 à 11:59:32  profilanswer
 

sed -n -e 's/^\(.\).*\-\(.\).*$/\1\2/p'


n°1113462
hfrfc
Bob c'est plus simple à dire..
Posté le 16-02-2009 à 12:03:55  profilanswer
 

gratz :)


---------------
D3/Hots/Hs Doc#2847
n°1113573
Taz
bisounours-codeur
Posté le 16-02-2009 à 20:20:01  profilanswer
 

Faut pas non plus batailler. Je vois trop de gens chier des usines à gaz en shell (plusieurs milliers de lignes), avec du awk à toutes les sauces, des fichiers temporaires (pas temporaires du tout), des tas de merdes pas réutilisables (me parler pas des fonctions shell ça dépend toujours de 14 variables externes, etc).
 
Des que ça s'allonge, ça devient très vite intéressant de faire genre du perl, d'avoir des structures de données, des vrais fonctions réutilisables, un découplage des formats d'entrée et de sortie. Pour un volume de code très inférieur.
 
Même quand on est coincé sur un perl 5.6, ça sera toujours meilleur. Ne serait-ce qu'en gestion d'erreur, etc. La plus part des scripts shell rendent l'ame avec un pauvre "set -e -u", le fait qu'ils fonctionnent tient plus de la chance que d'autres choses.
 
J'ai rien contre le shell, mais dès qu'il y a un vrai traitement, de transformation, etc, ce n'est plus adapaté, sauf pour empoisonner les gens qui viendront après vous et perdre du temps.

n°1113920
hfrfc
Bob c'est plus simple à dire..
Posté le 17-02-2009 à 15:00:06  profilanswer
 

Il faut que je me mette au perle plus serieusement alors :)
 
Je me pose certaine question sur la vitesse des scripts bash. Dans l'exemple ci dessous, le script marche mais est extremement lent ! Sur un machine puissante, il crée seulement une ligne toute les 3-5 secondes sur le fichier de sortie !!! Je ne sais pas d'ou cela vient  :??: !!
 

Code :
  1. FILE_TMP=/home/xx.txt
  2. FILE_PROF=/home/xxx.txt
  3. DATE=`date +%Y%m%d`
  4. while read ligne; do
  5.         #creation du login
  6.         nom=$(echo $ligne | cut -d '|' -f1 | cut -d '-' -f1)
  7.         prenom=$(echo $ligne | cut -d '|' -f2)
  8.         login=$(echo ${prenom:0:2})$nom
  9.         grep $login $FILE_PROF > /dev/null 2>&1
  10.          #si occurence non trouvee on inscrit le compte dans le fichier sortie
  11.         if [ $? -eq 1 ]; then
  12.          #creation dun mdp aleatoire
  13.          PASSWORD=`/usr/bin/makepasswd --chars=6`
  14.          #out
  15.          echo $ligne | sed -e "s/$/|$login|$PASSWORD|$DATE/" >> $FILE_PROF
  16.         fi
  17. done < $FILE_TMP


Message édité par hfrfc le 17-02-2009 à 15:01:33

---------------
D3/Hots/Hs Doc#2847
n°1113935
ph75
Posté le 17-02-2009 à 15:43:29  profilanswer
 

Ben il faut tracer avec l'option "-x", si c'est si lent que cela, l'endroit va sauter aux yeux ...

n°1113941
wedgeant
Da penguin inside
Posté le 17-02-2009 à 15:48:52  profilanswer
 

ben je dirais bien que ça dépend de la taille de ton fichier FILE_PROF surtout :spamafote:
tu fais un grep dessus, si le fichier est énorme, ça prend bien du temps quoi :/


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1113943
hfrfc
Bob c'est plus simple à dire..
Posté le 17-02-2009 à 15:51:33  profilanswer
 

350 ligne ca va encore  [:spamafote]


---------------
D3/Hots/Hs Doc#2847
n°1113945
wedgeant
Da penguin inside
Posté le 17-02-2009 à 15:54:29  profilanswer
 

longueur de la ligne ? :??:
j'vois qu'ça [:cosmoschtroumpf]
 
ou sinon, machine bien chargée et nice de merde sur ton script :spamafote:


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1113989
hfrfc
Bob c'est plus simple à dire..
Posté le 17-02-2009 à 16:58:48  profilanswer
 

70-80 de longueur :/
 
pas de charge sur la machine :/
 
Bref bizarre. Ca fait le meme comportement sur une VM linux et sur le serveur reel (etch).


---------------
D3/Hots/Hs Doc#2847
mood
Publicité
Posté le 17-02-2009 à 16:58:48  profilanswer
 

n°1114515
sputnick
bip...bip...bip...bip...bi...b
Posté le 19-02-2009 à 01:57:20  profilanswer
 

Salut,
 
si tu veut du concis :
 

Code :
  1. #!/usr/bin/env bash
  2. # vim:ts=4:sw=4
  3. for arg; do
  4.     tg=${arg%-*} td=${arg#*-}
  5.     [[ $td != $tg ]] && printf '%s\n' ${tg:0:1}${td:0:1} || true
  6. done


 
 
Je n'utilise ques des builtins bash.
En testant dans vim :

Code :
  1. :!bash % charles-henry pierre marc-andre robespierre


J'obtient :
ch
ma


Message édité par sputnick le 19-02-2009 à 02:00:57

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

  bash : extraction de caractères

 

Sujets relatifs
Script bash : récuperer des données dans un fichierParser basique en bash (sed ??)
Partimage coté serveur, bash: partimaged: command not foundScript bash: Permission non accordée !?
[bash] Recuperer des données d'une base MYSQL[SHELL] Insertion chaine de caractères
[BASH] Amélioration de script (boucle et autre)[bash] effectuer un ls sans afficher chemin des fichiers
[bash] trouver le fichier le plus recent dans un dossier avec find[bash] commande lors de l'ouverture d'un terminal
Plus de sujets relatifs à : bash : extraction de caractères


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