Un grand merci pour cette astuce qui fonctionne a merveille ! :jap: :bounce:
m3z
Hello,
Tu peux directement le faire dans ton script awk avec la commande gsub(regexp, replacement, target) comme ca ton script fonctionnera quelque soit la methode de transfert ;-)
ex : Supprime les retours chariot de fin de ligne. A placer avant tes traitements (entre les lignes 7 et 8)
gsub (/\r$/, "", $0)
Pour info: ces caractères existent bien dans le fichier Windows mais tu ne les vois pas car ils sont interprétés. Sous linux le caractère est simplement affiché.
Pour en avoir le coeur net, edit le fichier sous windows avec un editeur binaire tu trouveras ce caractère en fin de ligne sa valeur est 13 ou 0xD en hex.
A+
Le_Tolier
Alors merci pour ta reponse. :jap:
La commande perl ne fonctionne pas :\ , par contre j ai resolue mon prob en utilisant scp pour transferer le fichier.
Et effectivement en ftp normale les fin de ligne sont en crlf et avec scp c est lf.
deather2
Ça dépend de l'éditeur utilisé... tu peux utiliser 'file' pour savoir si le fichier utilise des fins de ligne Unix ou DOS
Le_Tolier
Je vais tester ton idee ms ce qui me parait bizarre c est que ces symboles n existe pas sur le fichier csv ( qui vient de window ) ms apparaissent apres le traitement qui lui est sous linux ...
deather2
^M c'est le retour à la ligne MS-DOS (Et Windows)
Si tu veux convertir un fichier texte DOS vers Unix, fais:
perl -p -e 's/\r$//' < fichier > fichier.unix
(Ne PAS prendre le même nom genre < fichier > fichier, tu te retrouverais avec un fichier vide...)
Et fais un backup du fichier avant, dès fois que ma solution ne soit pas la bonne ou que le ^M soit voulu
Le_Tolier
Bonjour,
J'ai fait un script qui extrait des valeurs d'un fichier au format csv pour les mettre dans un fichier sql.
Ca marche pas trop mal sauf qu a la fin dans ma derniere concatenation j ai des caracteres bizarres qui apparaissent : ^M :??:
Le script
Code :
commande=`echo $ligne | awk -v table=$table '
BEGIN {
FS="%"
chaine="INSERT INTO " table " VALUES ("
}
{
chaine=chaine"\""$1"\""
for ( i=2 ; i < NF-1 ; i++ ) {
chaine=chaine", \""$i"\""
}
#chaine=chaine"\""$NF"\""
chaine=chaine", \"" $bob "\" );"//ici le prob je pense
}
END {
print chaine
}
' `
echo $commande;
echo "";
done;
Le resultat c est apres la variable $bob j ai :
"FAUX", "FAUX^M" ); (avec vi) si je fais un more j ai : " );", "", "", "2", "", "FAUX", "FAUX
J'ai aucune idee du pourquoi du comment :fou: Merci a vous :jap: