Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/04/2014, à 16:28

Rob414

[RESOLU] Insertion d'un caractère dans un fichier avec awk.

Bonjour,

je me casse la tête depuis un moment pour effectuer une insertion de caractère dans un fichier et comme un bon exemple vaut mieux qu'un long discours:
mon fichier (enfin un extrait, il est beaucoup plus long) :

CB34;154;COL2;Charlebourg_4;trait1
CB72;155;COL1;Chaville_4;trait1
CC03;156;COL1;Longchamp_3;trait1
DJ30;288;COL1;Dijon_Volt_6;trait1
MH42;289;COL1;Mulhouse_Europe;trait1
SG66;290;COL1;Strasbourg_Brog;trait1
TO68;291;COL2;Tours_Cotty;trait1
OR27;292;COL2;Orleans_Pasteur;trait1

mon problème est d'insérer un 0 (zéro) devant les 3 chiffres du second champ , 154 doit être 0154 par exemple.
j'avais trouvé ceci (merci à tous ceux qui publie des modèles de script sur le web):
awk -F ";" '{printf("0%s\n" , $2)}' monfichier.txt
0154
0155
0156
0288
0289
0290
0291
0292
OK ,mais lorsque je demande la création dans un nouveau fichier, je n'ai pas la retranscription de toutes mes lignes du fichier d'origine, je n'ai que les lignes ci dessus.
Le printf ne doit servir qu'à afficher, j'ai donc essayé avec des sub, des substr etc..., ben non c'est pas aussi simple.
la programmation c'est un métier, et moi je suis juste un bricolo; alors si vous avez une idée.........
je suis preneur.
Merci

Dernière modification par Rob414 (Le 04/04/2014, à 15:16)

Hors ligne

#2 Le 03/04/2014, à 16:44

pingouinux

Re : [RESOLU] Insertion d'un caractère dans un fichier avec awk.

Bonjour,
Est-ce que ceci convient ?

awk -F ";" '{if($2~/^[0-9]+$/)printf("0%s\n" , $2);else print}' monfichier.txt

Hors ligne

#3 Le 03/04/2014, à 16:46

genma

Re : [RESOLU] Insertion d'un caractère dans un fichier avec awk.

Je t'explique ta commande
awk -F ";" '{printf("0%s\n" , $2)}' monfichier.txt

-F : le séparateur est le ;
il coupe chaque ligne en bloc.
Exemple pour CB34;154;COL2;Charlebourg_4;trait1 est coupé en bloc
$0:CB34
$1:154
$2:COL2

Si tu veux toutes les lignes avec un 0 devant chaque numéro,
il faut faire un print des différentes variables correspondant aux colonnes, séparées par des ";"

awk -F ";" '{printf("0%s\n" ,$1";""0"$2";"$3";"$4)}' monfichier.txt

Me donne :

0CB34;0154;COL2;Charlebourg_4
0CB72;0155;COL1;Chaville_4
0CC03;0156;COL1;Longchamp_3
0DJ30;0288;COL1;Dijon_Volt_6
0MH42;0289;COL1;Mulhouse_Europe
0SG66;0290;COL1;Strasbourg_Brog
0TO68;0291;COL2;Tours_Cotty
0OR27;0292;COL2;Orleans_Pasteur

C'est ce que tu veux, non?

awk -F ";" '{printf("0%s\n" ,$1";""0"$2";"$3";"$4)}' monfichier.txt >monresultat.txt

créera le fichier monresultat.txt avec les lignes comme tu veux.


"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ?      https://blog.genma.fr
Mon twitter?     http://twitter.com/genma

Hors ligne

#4 Le 03/04/2014, à 22:40

aduxas

Re : [RESOLU] Insertion d'un caractère dans un fichier avec awk.

genma a écrit :

$0:CB34
$1:154
$2:COL2

Non, $0 c'est toute la ligne.  La numérotation des champs commence par 1.

Hors ligne

#5 Le 04/04/2014, à 09:18

credenhill

Re : [RESOLU] Insertion d'un caractère dans un fichier avec awk.

hello

$ awk 'BEGIN {FS=OFS=";"} {$2="0" $2; print}'  fichier
CB34;0154;COL2;Charlebourg_4;trait1
CB72;0155;COL1;Chaville_4;trait1
CC03;0156;COL1;Longchamp_3;trait1
DJ30;0288;COL1;Dijon_Volt_6;trait1
MH42;0289;COL1;Mulhouse_Europe;trait1
SG66;0290;COL1;Strasbourg_Brog;trait1
TO68;0291;COL2;Tours_Cotty;trait1
OR27;0292;COL2;Orleans_Pasteur;trait1

Hors ligne

#6 Le 04/04/2014, à 15:15

Rob414

Re : [RESOLU] Insertion d'un caractère dans un fichier avec awk.

Merci à tous , eh bien le grand gagnant qui se verra remettre le "awk" d'or est .................credenhill

c'est exactement ce que j'ai cherché à faire pendant 2 jours (pas à plein temps, quand même!).
Les autres, ne pleurez pas, en lot de consolation recevez ma gratitude car ça marche aussi sauf que je souhaitais un "0" seulement devant le champ $2.

Merci à Pinguinux pour sa promptitude
Merci à Genma pour les explications, je connais un peu mais j'ai du mal à mettre la bonne syntaxe et dans le bon ordre, ajoute à ça les lacunes.........et la mémoire pas au top, ça donne l'étendue des dégats....
et merci à Aduxa pour la rectif sur $0, (mais ça je le savais, na)

Bon week à tous

je passe en résolu

Hors ligne