Utilise awk à la place de cut

for i in `cat fichier.csv`
do
  field1=`echo $i | awk '{print $1}'`
  etc...
done

Le 21/04/05, Charles-Henri d'Adhémar<[EMAIL PROTECTED]> 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...
> 
> 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
> 
> _______________________________________________
> Nasgaia-dev mailing list
> [email protected]
> https://mail.gna.org/listinfo/nasgaia-dev
> 


-- 
Richard 'riri' GILL
-- L'important dans vi, c'est maîtriser Echap et i --

Répondre à