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...

Nota : mon script doit etre compatible shell pour des problemes de portabilite
(je jongle entre des machines unix de sun, hp, linux et ibm....) donc pas de
bash , juste du sh !

Merci beaucoup :-)
++
Chicha

Répondre à