Modifier les lignes d'un fichier.csv en bash

h.djalal Messages postés 15 Statut Membre -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai un fichier .csv je v'ai vous donner un exemple de 2 lignes de mon fichier:

,Monitor,MJ17HMEY645914,,112204,Samsung,SyncMaster 710T,160-R-023,1970265,Active
,Monitor,MJ17HMEY645919,,112209,Samsung,SyncMaster 710T,160-R-023,1970265,Active
.......

j'aimerais transformer ce fichier de tel sorte que:
a chaque fois qu'il ya une "," au debut de la ligne j'insert un "#" avant la virgule, et que a chaque fois qu'il ya ",," j'insert un "#" entre les 2 virgules

comment faire cela en bash svp ?

merci d'avance.

2 réponses

  1. gm
     
    Bonjour,

    sed 's/^,/#,/' /tmp/test | sed 's/,,/,#,/'
    #,Monitor,MJ17HMEY645914,#,112204,Samsung,SyncMaster 710T,160-R-023,1970265,Active
    #,Monitor,MJ17HMEY645919,#,112209,Samsung,SyncMaster 710T,160-R-023,1970265,Active
    
    0
  2. h.djalal Messages postés 15 Statut Membre
     
    Bonjour,

    j'ai mis sa:
    sed 's/^,/###,/' /home/djalal/Desktop/Inventory_PH_AIP_AIO__2011.csv | sed 's/,,/,###,/'

    et ceci ne modifie en rien mon fichier :(
    0
    1. gm
       
      Le sed écrit sur la sortie standard. Pour modifier ton fichier, deux possibilités :

      1) Rediriger la sortie standard dans un fichier temporaire puis le déplacer :
      sed 's/^,/###,/' /home/djalal/Desktop/Inventory_PH_AIP_AIO__2011.csv | sed 's/,,/,###,/' > nouveau_fichier
      mv nouveau_fichier /home/djalal/Desktop/Inventory_PH_AIP_AIO__2011.csv


      2) Utiliser l'option "inplace" de sed :
      sed -i 's/^,/###,/' /home/djalal/Desktop/Inventory_PH_AIP_AIO__2011.csv
      sed 's/,,/,###,/'  /home/djalal/Desktop/Inventory_PH_AIP_AIO__2011.csv
      0
    2. h.djalal Messages postés 15 Statut Membre
       
      Bonjour,
      meme en sortie standard le fichier reste telquel !!!
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Affiche la sortie de la commande :

      cat -A ton_fichier
      0
    4. h.djalal Messages postés 15 Statut Membre
       
      salut,
      voila quelque ligne de la sortie :

      Alice AIP Computing inventory,###,###,,,,,,,,,,,^MHOSTNAME,Type,Serial Number,MAC address,CERN Int. No,Supplier,Model type,Office No,DAI No,Status,User Name,,Year,Department^M,Monitor,CZK818012N,,128966,HP,"LP2465-EF224A4 - 24""",12-1-009,2753610,Active,Grigoras,Alina,2008,PH-AIP^M,Monitor,6Z111749GB,,121799,NEC,2170WX,11-R-007,2385506,Active,Visitors,,2007,PH-AIP^M,Monitor,CNN80805DG,,128944,HP,LP1965,1-R-035,2747616,Active,Mastroserio,Annalisa,2008,PH-AIP^M,Monitor,CNN71618D9,,124962,HP,LP1965,12-R-012,2517966,Active,Ressegger,Stefan,2007,PH-AIP^M,Monitor,CNN7050D4Y,,124948,HP,LP1965,,2497955,Destroyed,,,2007,PH-AIP^M,Monitor,CNN7050D4X,,124946,HP,LP1965,12-1-004,2497955,Active,Lohn,Stefan,2007,PH-AI


      efectivement il a inserer '###' mais c pas dutt ce que je veux! lol

      moi ce que je veux c d'inseret les # la ou c en gras par exemple :)

      si vous pouvez m'aider sa serait sympat merci
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ton problème c'est que ton fichier est au format Micro$oft (^M), d'où l'inefficacité de la syntaxe ;-((

      Il faut convertir ton fichier au format Unix, soit à l'aide de la commande dos2unix si elle est installée soit à l'aide de "sed".

      Voir l'article dans la faq : Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF)
      0