Unix - remplir champs vide dans fichier

Résolu/Fermé
JsuisNul - 13 oct. 2010 à 17:04
 JsuisNul - 14 oct. 2010 à 16:48
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.




A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
Modifié par jipicy le 13/10/2010 à 18:31
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 oct. 2010 à 19:04
Salut,

Et les cas, 1er et dernier champ vides ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 oct. 2010 à 19:10
Salut,

Je te les ai laissés ;-))
Mais en fait ça en tient compte ;-))

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

$ sed '/^[^;]*;;/s/;;/;valeur par défaut;/' fichier
aaaaa;bbbbb;;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;
aaaa;valeur par défaut;cccc;dddd
;valeur par défaut;cccc;dddd
;valeur par défaut;cccc;
;bbbbb;cccc;dddd

$

;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 oct. 2010 à 19:15
Re,

Mais en fait ça en tient compte ;-))
Pas pour moi. Si le champ est vide il doit être rempli avec la valeur par défaut il me semble.
valeur par défaut;bbbbb;cccc;dddd
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 oct. 2010 à 19:17
Re-

Je cite :
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

;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 oct. 2010 à 19:21
Re,

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

?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 oct. 2010 à 11:40
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
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.
0