Awk / gsub

Résolu
Cc_92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
Cc_92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai un fichier csv en entrée qui ressemble à cela :
1;1#26#29;1
2;;1
3;2#15#;1

J'aimerai obtenir en sortie un fichier csv avec la donnée de la deuxième colonne découpé en plusieurs colonnes.
J'ai fait un simple awk :
awk -F';' '{ $2 = ($2 != "" ? gsub(/#/, ";") : ";;" ) } 1' OFS=';' test.txt > test2.txt

Et voici la sortie obtenue :
1;2;26;29;1
2;;;;1
3;2;15;;1
Je ne comprends pas pourquoi le 1 (première ligne, 1ere colonne) se transforme en 2 dans le fichier en sortie...
Auriez-vous une idée ?

Merci pour votre aide.

1 réponse

lEprofSonDkon Messages postés 211 Date d'inscription   Statut Membre Dernière intervention   13
 
salut,

awk 'BEGIN{FS=OFS=";"}{gsub("#",";",$2)}1'
KISS principle
0
Cc_92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,
Ce n'est pas aussi simple que ça... Pour mon fichier csv, chaque ligne doit avoir le même nombre de colonne. Or parfois la deuxième colonne du fichier d'entrée est vide, d'où mon test.
0
lEprofSonDkon Messages postés 211 Date d'inscription   Statut Membre Dernière intervention   13 > Cc_92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
le
2
, c'est le nombre de substitution opérée par
gsub()
.
awk 'BEGIN{FS=OFS=";"}{$2=$2==""?";;":gensub("#",";","g",$2)}1'
0
Cc_92 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci.
0