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
si dans la boucle je ait des
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
pas de soucis tout s'affiche correctement, mais des que je met tout en ligne avec les ; en separateur, tout fou le camp >_<
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 echo "${var1}" echo "${var2}" ...
Si vous trouvez l'erreur je suis preneur, car la je pense avoir les yeux qui se croisent
Merci
Partager