Modifier les lignes d'un fichier.csv en bash

Fermé
h.djalal Messages postés 13 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011 - 10 nov. 2011 à 10:09
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 nov. 2011 à 15:29
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.
A voir également:

2 réponses

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
h.djalal Messages postés 13 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
10 nov. 2011 à 10:52
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
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
h.djalal Messages postés 13 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
10 nov. 2011 à 11:19
Bonjour,
meme en sortie standard le fichier reste telquel !!!
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
10 nov. 2011 à 11:33
Salut,

Affiche la sortie de la commande :

cat -A ton_fichier
0
h.djalal Messages postés 13 Date d'inscription jeudi 10 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011
10 nov. 2011 à 11:43
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
10 nov. 2011 à 11:52
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