Unix - remplir champs vide dans fichier

Résolu
JsuisNul -  
 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

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      Et les cas, 1er et dernier champ vides ?
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
    3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
    5. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

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

      ?
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  3. JsuisNul
     
    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