[Shell] Insérer un caractère

Insérer un caractère [Shell] - Shell/Batch - Programmation

Marsh Posté le 06-03-2008 à 18:33:32    

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.

Reply

Marsh Posté le 06-03-2008 à 18:33:32   

Reply

Marsh Posté le 06-03-2008 à 20:29:11    

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
Reply

Marsh Posté le 06-03-2008 à 21:26:02    

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:

Reply

Marsh Posté le 06-03-2008 à 23:27:02    

Plus simple avec perl:
 

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



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

Sujets relatifs:

Leave a Replay

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