[Résolu] Caractere bizarre dans un script AWK

Caractere bizarre dans un script AWK [Résolu] - Linux et OS Alternatifs

Marsh Posté le 07-10-2005 à 09:56:05    

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 :
  1. commande=`echo $ligne |  awk -v table=$table '
  2. BEGIN {
  3. FS="%"
  4. chaine="INSERT INTO " table " VALUES ("
  5. }
  6. {
  7.         chaine=chaine"\""$1"\""
  8.         for ( i=2 ; i < NF-1 ; i++ ) {
  9.                 chaine=chaine", \""$i"\""
  10.         }
  11.         #chaine=chaine"\""$NF"\""
  12.         chaine=chaine", \"" $bob "\" );"//ici le prob je pense
  13. }
  14. END {
  15. print chaine
  16. }
  17. ' `
  18. echo $commande;
  19. echo "";
  20. 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:


Message édité par Le_Tolier le 07-10-2005 à 10:58:14

---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 07-10-2005 à 09:56:05   

Reply

Marsh Posté le 07-10-2005 à 10:00:15    

^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

Reply

Marsh Posté le 07-10-2005 à 10:03:08    

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 ...


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 07-10-2005 à 10:16:31    

Ça dépend de l'éditeur utilisé... tu peux utiliser 'file' pour savoir si le fichier utilise des fins de ligne Unix ou DOS

Reply

Marsh Posté le 07-10-2005 à 10:36:57    

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.


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 07-10-2005 à 10:39:00    

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+


Message édité par m3z le 07-10-2005 à 10:43:08
Reply

Marsh Posté le 07-10-2005 à 10:57:55    

Un grand merci pour cette astuce qui fonctionne a merveille !  :jap:  :bounce:


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Sujets relatifs:

Leave a Replay

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