séparer les champs d'un fichier *.txt par des " " (help)

séparer les champs d'un fichier *.txt par des " " (help) - Shell/Batch - Programmation

Marsh Posté le 23-05-2008 à 10:57:23    

Bonjour, j'ai un fichier *.txt avec un nombre important de données organisées comme ceci :  
 
xxx zzz yyy
xxx zzz yyy            
 
Je voudrais en une simple manip arriver à ceci pour importer sans difficulté ce ces données dans une table.
 
"xxx" "zzz" "yyy"
"xxx" "zzz" "yyy"
 
 :pt1cable:

Reply

Marsh Posté le 23-05-2008 à 10:57:23   

Reply

Marsh Posté le 23-05-2008 à 11:22:14    

En quel langage ? Sous quel OS ?

Reply

Marsh Posté le 23-05-2008 à 11:27:19    

C'est des espaces ou des tabulations ? Les chaînes de caractère ne contiennent jamais d'espace ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 23-05-2008 à 11:35:50    

Elmoricq a écrit :

En quel langage ? Sous quel OS ?


 
Je suis sous Linux (Debian)
 

babasss a écrit :

C'est des espaces ou des tabulations ? Les chaînes de caractère ne contiennent jamais d'espace ?


 
Tabulations, jamais d'espace entre les caractères, ce sont des @mac @ip date ...

Reply

Marsh Posté le 23-05-2008 à 11:42:49    

Je déplace le sujet dans shell/batch alors.

 

Personnellement j'écrirais ça en awk :

awk '{ for(i=1; i <= NF; i++) { printf("\"%s\" ", $i); } printf("\n" ); }' tonfichier

 

Ou alors en PERL :

perl -p -e 's/(\w+)/"$1"/g;' tonfichier

 

Doit y avoir moyen avec sed aussi, mais j'ai toujours autant de mal avec les regexp POSIX.


Message édité par Elmoricq le 23-05-2008 à 11:52:49
Reply

Marsh Posté le 23-05-2008 à 11:43:51    

Tu veux un script ? Si oui, répétitivité du script ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 23-05-2008 à 12:25:30    

Merci Elmoricq, je vais essayer d'appliquer ça.  
 
C'est assez nouveau pour moi, mais je suis en stage, donc là pour apprendre.  
 
Thx

Reply

Marsh Posté le 23-05-2008 à 14:21:02    

Alors, je n'arrive pas à appliquer le awk ... avec le perl j'obtiens un résultat, pas le bon mais c'est déjà un début ...
 
mais petite rectification :  
 
c'est un fichier *.dat (je précise on ne sait jamais ...)
 
les champs sont séparés par des tabulations, mais malheureusement pour les @mac je n'obtient pas "0:1:2:4:92:63" mais "0":"1":"2":"4":"92":"63" ...  
 
Une idée ?

Reply

Marsh Posté le 23-05-2008 à 14:34:58    

J'ai réussi à applique le awk  
 

awk '{ for(i=1; i <=NF; i++) { printf("\%s\"          ", $i); } printf("\n" ); }' abc.dat


 
Par contre le résultat est le suivant :  
 

\0:b:du:93:5c:b0"          \169.224.8.63"          \1186567540"

 
 
Si vous pouviez m'indiquer comment remplacer le "\" par une guillemet ...


Message édité par Bok_75 le 23-05-2008 à 14:36:14
Reply

Marsh Posté le 23-05-2008 à 14:41:21    

Tu as mal recopié le awk, tout simplement.

 

Il s'agit d'échapper le caractère guillemet pour éviter qu'il ne soit directement interprété par awk. On écrit donc : \"

Message cité 1 fois
Message édité par Elmoricq le 23-05-2008 à 14:41:48
Reply

Marsh Posté le 23-05-2008 à 14:41:21   

Reply

Marsh Posté le 23-05-2008 à 14:43:36    

Elmoricq a écrit :

Tu as mal recopié le awk, tout simplement.  
 
Il s'agit d'échapper le caractère guillemet pour éviter qu'il ne soit directement interprété par awk. On écrit donc : \"


 
En effet [:angelfire]
 
Merci  :jap:

Reply

Sujets relatifs:

Leave a Replay

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