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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] Insérer un caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell] Insérer un caractère

n°1698470
epo03
Posté le 06-03-2008 à 18:33:32  profilanswer
 

Bonsoir,
En shell, je souhaite insérer un 'espace' dans une chaine contenant 32 caractères alphanumériques mais il faut que cette insertion se fasse tous les 8 caractères ; exemple :
 
avant :
afe4cd47afe4cd570010d64343e37721
 
après :
afe4cd47 afe4cd57 0010d643 43e37721
 
avec sed j'insère un espace après chaque caractère :
 
sed 's/\([^ ]\)/\1 /g' fic1 > fic2 :
 
cat fic1 :
afe4cd47afe4cd570010d64343e37721
 
cat fic2 :
a f e 4 c d 4 7 a f e 4 c d 5 7 0 0 1 0 d 6 4 3 4 3 e 3 7 7 2 1
 
Avec awk j'arrive au résultat final :
 
awk '{print $1$2$3$4$5$6$7$8" "$9$10$11$12$13$14$15$16" "$17$18$19$20$21$22$23$24" "$25$26$27$28$29$30$31$32}' fic2 > fic3
 
cat fic3 :
afe4cd47 afe4cd57 0010d643 43e37721
 
Ma question : l'utilisation d'awk dans ce cas me parait bien lourde ; peut on arriver au résultat final plus simplement ?
 
Merci.

mood
Publicité
Posté le 06-03-2008 à 18:33:32  profilanswer
 

n°1698520
olivthill
Posté le 06-03-2008 à 20:29:11  profilanswer
 

Il y a des awk qui accepte la fonction substr(), et aussi printf qui est plus pratique que print.

awk '{printf("%8s %8s %8s %8s", substr($1,1,8), substr($1,9,8), substr($1,17,8), substr($1,25,8)}' fic1 > fic2

(non testé).
 
Sinon, il est possible de faire une boucle sur chaque chaine de 32 caractères (je n'ai pas compris s'il n'y en a qu'une ou plusieurs), de couper des morceaux de 8 caractères avec cut -b1-8, cut -b9-18, etc, puis de les coller par un echo vers le fichier resultat.

Message cité 1 fois
Message édité par olivthill le 06-03-2008 à 20:30:34
n°1698544
epo03
Posté le 06-03-2008 à 21:26:02  profilanswer
 

olivthill a écrit :

Il y a des awk qui accepte la fonction substr(), et aussi printf qui est plus pratique que print.

awk '{printf("%8s %8s %8s %8s", substr($1,1,8), substr($1,9,8), substr($1,17,8), substr($1,25,8)}' fic1 > fic2

(non testé).


Je teste cette commande demain :jap:

n°1698597
arsunik
ma tuxitude me beastifie
Posté le 06-03-2008 à 23:27:02  profilanswer
 

Plus simple avec perl:
 

Code :
  1. perl -pe 's:(.{8}):$1 :g' fic1



---------------
[:arsunik]  Les tournois de badminton

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] Insérer un caractère

 

Sujets relatifs
récupérer une partie d'une chaîne de caractère (en partant de la fin)tableau d'une chaine de caractere
[Excel] Supprimer un caractère d'un texteproblème encodage caractére avec htmlspecialchars()
problème encodage caractéreLancer un bash shell [newbie]
[VB/VBA/VBS] Excel vba et Windows 64 bit: problème de shell ?Passer une variable C en Shell avec un system()
Comment insérer un script php ?[vba excel] concatenation d'une chaine de caractère
Plus de sujets relatifs à : [Shell] Insérer un caractère


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