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 ksh : Sélectionner tout - Visualiser dans une fenêtre à part
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 ksh : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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