Le Jeudi 21 Avril 2005 10:45, Charles-Henri d'Adhémar a écrit :
> Hello,
>
> j'ai besoin d'un petit coup de main en programmation shell.
> Je dois faire un petit script shell dans le cadre de mon boulot : pour
> migrer des donnees d'un serveur de DB vers un autre (peut importe en
> faite).
>
> J'ai un fichier dans lequel j'ai le resultat d'une requete sql (oracle).
> chaque ligne est de la forme :
>
> dat1, data20 data21, data3,....
>
> je veux parser ce fichier :
>
> for i in `cat fichier.csv`
> do
>   field1=`echo $i | cut -d ',' -f1`
>   etc...
> done
>
> le probleme est que lors du cat, la boucle for split chaque fois qu'il
> rencontre un espace, cad qu'une ligne peut ainsi se retrouver decoupee en
> plusieurs ligne, et donc ma variable i ne contient pas la ligne entiere
> mais seulement des bouts.
>
> La solution que j'ai trouve est d'eliminer les espaces indesirables (avec
> sed) entre les virgules (separateur de champ). Pour ce qui est des espaces
> entre les mots (que je souhaite conserver) je les remplace par \s avant le
> cat, puis je les remet en tant qu'espace au parsing...
>
> Vous me suivez ?
>
> Comment faire pour eviter de faire ca, cad que le for ne split pas mon cat
> quand il rencontre des espaces...

Mets des guillemets autour de ton `cat fichier.csv` -> "`cat fichier.csv`"

++
Gontran

Répondre à