Unix - remplir champs vide dans fichier

[Résolu/Fermé]
Signaler
-
 JsuisNul -
Bonjour,

Tout d'abord, je suis un débutant en script shell et je vous remercie d'avance pour votre aide.
Voila ce que je souhaiterai faire.

j'ai un fichier au format CSV avec des ";" comme séparateur de champs.

ex : aaaaa;bbbbb;cccc;dddd

je voudrais lorsque la ligne est incomplète (c'est toujours le même champs qui est concerné) inserer une valeur par défaut à la place du champs manquant

ex: aaaa;;cccc;dddd => aaaa;valeur par défaut;cccc;dddd

Par contre si le champ est renseigné je ne veux pas la modifier.

Si quelqu'un peut m'aider, merci.




3 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 885
Salut,

$ cat fichier 
aaaaa;bbbbb;cccc;dddd 
aaaa;;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 
aaaa;;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 
aaaa;;cccc;dddd 
aaaa;;cccc;dddd 
aaaa;;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 

$ sed -i.bak '/^[^;]*;;/s/;;/;valeur par défaut;/' fichier 

$ cat fichier 
aaaaa;bbbbb;cccc;dddd 
aaaa;valeur par défaut;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 
aaaa;valeur par défaut;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 
aaaa;valeur par défaut;cccc;dddd 
aaaa;valeur par défaut;cccc;dddd 
aaaa;valeur par défaut;cccc;dddd 
aaaaa;bbbbb;cccc;dddd 

$

;-))

$ man woman
Il n'y a pas de page de manuel pour woman.

GNU/Linux : Gnu/Linux is Not Ubuntu !
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 559
Re,

Alors en ce cas pourquoi pas tout simplement
sed s/;;/;valeur par défaut;/' fichier

?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 885
Par ce que c'est toujours le même champ qui est concerné mais on ne sait pas si d'autres peuvent aussi être vides ;-\
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 559
Re,

En ce cas il pourra nous dire quel champs doit être testé.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 885
Ben faute de renseignements j'ai fait au mieux ;-))
Bonjour,

Merci beaucoup pour vos réponses.
en effet, c'est toujours le même champs qui est concerné et que je veux tester pour mettre la valeur par défaut. Les autres champs s'ils sont à vide ne m'intéressent pas.
D'ailleurs serait-il possible de le nommer dans le code comme champs n°6 (du genre $6) car mon fichier est un fichier CSV avec toujours 9 champs en tout?
je vais dejà tester la solution proposée.

Merci encore !!
Messages postés
18280
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
12 octobre 2021
5 392
hello
$ echo "a;b;c;d;e;;f;g" | awk -v c="valeur par defaut" 'BEGIN{FS=OFS=";"} !$6 {$6=c} {print}'
a;b;c;d;e;valeur par defaut;f;g
$ 
$ echo "a;b;c;d;e;f;g;" | awk -v c="valeur par defaut" 'BEGIN{FS=OFS=";"} !$6 {$6=c} {print}'
a;b;c;d;e;f;g;
$ 
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Hello,

Je viens de tester la solution de dubcek et ça fonctionne !!
merci beaucoup et notamment à Jipicy ( je crois que je suis vraiment trop nul pour pouvoir adapter ta solution ;oP)

Merci à tous.