Awk / gsub [Résolu]

Messages postés
3
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
4 février 2019
- - Dernière réponse : Cc_92
Messages postés
3
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
4 février 2019
- 4 févr. 2019 à 22:12
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.
Afficher la suite 

1 réponse

Messages postés
213
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
27 septembre 2019
13
0
Merci
salut,

awk 'BEGIN{FS=OFS=";"}{gsub("#",";",$2)}1'
KISS principle
Cc_92
Messages postés
3
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
4 février 2019
-
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.
lEprofSonDkon
Messages postés
213
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
27 septembre 2019
13 > Cc_92
Messages postés
3
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
4 février 2019
-
le
2
, c'est le nombre de substitution opérée par
gsub()
.
awk 'BEGIN{FS=OFS=";"}{$2=$2==""?";;":gensub("#",";","g",$2)}1'
Cc_92
Messages postés
3
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
4 février 2019
-
Merci.
Commenter la réponse de lEprofSonDkon