Ecriture d'une chaine facon CSV qui fait n'imp
Bonjour
J'ai fait pas mal de scripting en shell/ksh dans ma carrière, et dans le lot il m'arrivait que des faire des shell pour generer des fichiers csv, et j'ai jamais eut de problèmes avec ca.
bon, ca va faire 2 ans que j'ai pas fait de scripting serieusemenet, je m'y remet pour un petit projet, et je tombe sur une anomalie que je ne parvient pas a comprendre.
Je recupère des données a gauche et a droite via mon script en ksh, puis à la fin je fait une chaine de caractère type csv que je met dans un fichier.csv
separateur : ;
jusque la je faisait toujours de cette facon :
Code:
echo "${var1};${var2};${var3};" >> fichier.csv
La je suis sur une VM Ubuntu serveur, mon script est en ksh, mais quand je lance mon script, au final ma chaine ressemble a rien,
au lieu d'avoir mes valeurs dans le bon ordre, j'ai un mélange étrange
exemple :
Code:
1 2 3
| var1 = 123456
var2=toto
var3=987 |
au lieu d'avoir dans mon fichier : 123456;toto;987
j'ai : ;toto987;123456
c'est à n'y rien comprendre.
Voici en code ma boucle qui récupère des données et les met dans un CSV final
agent_demat est un fichier csv avec en entete précédé d'un#, d'ou le grep -v pour ignorer cette ligne
agent_full est au csv avec des données complementaires
mes csv sont tous avec un ; en separateur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
cat ${agent_demat} | grep -v "^#" | while read line
do
matricule=$(echo $line | cut -d";" -f1)
fic_pdf=$(ls ${pdf_dir}/${matricule}*.pdf)
#on check qu'on a bien qu'un fichier
verif=$(echo ${fic_pdf} | wc -w)
if [ ${verif} -ne 1 ]; then
echo "ERREUR Plusieurs fichiers PDF trouve pour le matricule : ${matricule}"
#on skip la suite et on passe a la suite
continue
fi
#Recuperation info de l'agent
nir=$(grep ${matricule} ${agent_full} | cut -d";" -f3)
nom=$(grep ${matricule} ${agent_full} | cut -d";" -f2)
#calcul du sexe par rapport au NIR
sexe=$(echo ${nir} | cut -c1)
#calcul du status de l'agent
statut=$(grep ${matricule} ${agent_full} | cut -d";" -f4)
case $statut in
"TITULAIRE")
stat="T"
;;
*)
stat="C"
;;
esac
priode=$(grep ${matricule} ${agent_full} | cut -d";" -f5)
montant=$(grep ${matricule} ${agent_full} | cut -d";" -f6)
ddnaiss=$(echo $line | cut -d";" -f4)
iban=$(echo $line | cut -d";" -f5)
#Renommage du PDF
#generation du nom
pdf_fin="${nir}_${MAIRIE_SIREN}_BPaie_${dtrt}_${seq}.pdf"
mv ${fic_pdf} ${pdf_dir}/${pdf_fin}
#Ecriture CSV final
echo "${matricule};${nom};${nir};${sexe};${ddnaiss};${iban};${stat};${MAIRIE_SIREN};${dtrt};${montant};${pdf_fin};${seq}" >> ${csv_fin}
((seq++))
done |
si dans la boucle je ait des
Code:
1 2 3 4
|
echo "${var1}"
echo "${var2}"
... |
pas de soucis tout s'affiche correctement, mais des que je met tout en ligne avec les ; en separateur, tout fou le camp >_<
Si vous trouvez l'erreur je suis preneur, car la je pense avoir les yeux qui se croisent
Merci