[BASH] Contenu d'un chaîne séparer par ";" (CSV)

Contenu d'un chaîne séparer par ";" (CSV) [BASH] - Shell/Batch - Programmation

Marsh Posté le 16-11-2005 à 22:17:39    


Bonjour  :)  
 
Voilà j'ai un fichier de type CSV avec des mot séparer par des ";"  (exemple d'un ligne : 1;champ1;champ2;champ3 )
Dans mon programme je fait une recherche et il me retourne par exemple 3 ligne contenant ce que je recherche :
 
1;champ1;champ2;champ3
5;champ1;champ2;champ3
6;champ1;champ2;champ3
 
 
J'aimerai pour chaque ligne mettre dans 4 variables ce qu'il y a entre les ";" et ce qui me donnerai pour la première réponse :
 
var1 = 1
var2 = champ1
var3 = champ2
var4 = champ3
 
que je pourrai ensuite exploiter ... :)
 
Auriez-vous une idée pour réaliser ceci ?  
Merci :jap:
 


---------------
flick r
Reply

Marsh Posté le 16-11-2005 à 22:17:39   

Reply

Marsh Posté le 17-11-2005 à 01:13:52    

une piste: for /?
 

Code :
  1. for /F "tokens=1,2,3,4 delims=; " %i in (test.txt) do @echo %i %j %k %l


Message édité par art_dupond le 17-11-2005 à 01:14:10
Reply

Marsh Posté le 17-11-2005 à 22:24:50    


Ok merci je vais essayer :)


---------------
flick r
Reply

Marsh Posté le 17-11-2005 à 22:43:02    

Je crois que la bonne réponse d'art_dupond est pour Windows/DOS, alors que la question est pour bash qui est un shell Unix.
Donc une solution pour Unix est  (non testé):
 

cat nom_du_fichier.csv | while read la_ligne
do
   var1=`echo $la_ligne | cut -d";" -f1`
   var2=`echo $la_ligne | cut -d";" -f2`
   var3=`echo $la_ligne | cut -d";" -f3`
   var4=`echo $la_ligne | cut -d";" -f4`
done

(Mais matafan va nous donner sans doute une meilleure solution :) )

Reply

Marsh Posté le 17-11-2005 à 22:52:32    

oups j'ai lu batch :p


---------------
oui oui
Reply

Marsh Posté le 18-11-2005 à 04:42:40    

On peut éviter l'usage multiple de cut en utilisant le "word splitting" du shell. Par exemple :

#!/bin/sh
 
cat txt | while IFS=';' read var1 var2 var3 var4
do
        echo "$var1 - $var2 - $var3 - $var4"
done


 
Edit : typo


Message édité par matafan le 18-11-2005 à 04:43:14
Reply

Marsh Posté le 18-11-2005 à 07:04:15    

Ou selon ce qu'on veut faire des champs récupérés, utiliser awk peut être avantageux.

Reply

Marsh Posté le 28-12-2005 à 19:27:42    


Génial ca marche :)
Merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed