Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1888 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs

  Remplacement de caractères dans un champ d'un fichier tabulé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacement de caractères dans un champ d'un fichier tabulé

n°433082
ls_one
Posté le 16-03-2004 à 12:56:11  profilanswer
 

Bonjour,
Voilà j'ai un fichier tabulé, le séparateur est une tabulation. Il y a 12 champ au total et 1000 lignes. Dans le champ 10 et 11, je souhaite remplacer un caractère par un autre, je veux remplacer le point "." par une virgule ",". Sachant que tout ça doit obligatoirement se faire dans un script *.csh. Je pense utiliser la commande awk dans mon script, mais j'y connais pas grand chose en awk donc si qql un à des idées ou peux me guider. Merci !

mood
Publicité
Posté le 16-03-2004 à 12:56:11  profilanswer
 

n°433117
yannigperr
Posté le 16-03-2004 à 13:43:19  profilanswer
 

Voilà qui devrais répondre à peu près à ton interrogation :
 
$ ll
total 4
-rw-rw-r--    1 yannig   yannig        176 mar 16 13:14 test.lst
$ cat test.lst
champ1;champ2;champ3;champ4;champ5,,;champ6
champ1;champ2;champ3;champ4;champ5,,;champ6
champ1;champ2;champ3;champ4;champ5,,;champ6
champ1;champ2;champ3;champ4;champ5,,;champ6
$ cat test.lst | awk -F\; '
{ gsub(",",".",$5) }
{ print $1 ";" $2 ";" $3 ";" $4 ";" $5 }'
champ1;champ2;champ3;champ4;champ5..
champ1;champ2;champ3;champ4;champ5..
champ1;champ2;champ3;champ4;champ5..
champ1;champ2;champ3;champ4;champ5..
 
Bonne journée !

n°433145
ls_one
Posté le 16-03-2004 à 14:11:48  profilanswer
 

Merci beaucoup

n°433295
ls_one
Posté le 16-03-2004 à 17:35:07  profilanswer
 

Après avoir testé, cela me donne une erreur :
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>cat test.lst
champ1;champ2;champ3,,;
champ1;champ2;champ3,,;
champ1;champ2;champ3,,;
champ1;champ2;champ3,,;
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>cat test.lst | awk -F\; '
> { gsub(",",".",$3) }
> {print $1 ";" $2 ";" $3 }'
awk: syntax error near line 2
awk: illegal statement near line 2

n°433306
ls_one
Posté le 16-03-2004 à 17:47:13  profilanswer
 

/* Je remplace les ";" par une tabulation */
 
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>cat test.lst
champ1    champ2    champ3,,    
champ1    champ2    champ3,,    
champ1    champ2    champ3,,    
champ1    champ2    champ3,,    
 
/* Je compte le nombre de champs par lignes */
 
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>awk '{print NF}' test.lst
3
3
3
3
 
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>awk                  
awk: Usage: awk [-Fc] [-f source | 'cmds'] [files]
 
/* Je veux remplacer les "," par des "." et ERREUR */
 
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>awk '{ gsub(",",".",$3) }
> ' test.lst
awk: syntax error near line 1
awk: illegal statement near line 1
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>
 
Franchement je comprends pas le problème !
Si vous avez une idée, merci.

n°433658
yannigperr
Posté le 17-03-2004 à 09:20:48  profilanswer
 

Tu utilises un Solaris ? Dans ce cas, il faut utiliser l'utilitaire nawk pour que ça fonctionne. Dans le cas contraire, tu te retrouves avec une vieille version toute pourrite de cette utilitaire.
-------@-------:/bla/bla/bla> cat test.lst
champ1;champ2;champ3,,;
champ1;champ2;champ3,,;
champ1;champ2;champ3,,;
champ1;champ2;champ3,,;
-------@-------:/bla/bla/bla> cat test.lst | nawk -F\; '{ gsub(",",".",$3) } { print $1 ";" $2 ";" $3 }'
champ1;champ2;champ3..
champ1;champ2;champ3..
champ1;champ2;champ3..
champ1;champ2;champ3..
 
Bonne journée !

n°433786
ls_one
Posté le 17-03-2004 à 14:47:14  profilanswer
 

Effectivement avec nawk cela marche la "," et remplacée par le ".". Mais ma question était de remplacer le "." par la ",". J'ai essayé la modification mais là encore un problème.
 
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>cat test.lst
champ1;champ2;champ.3;champ4;
champ1;champ2;champ.3;champ4;
champ1;champ2;champ.3;champ4;
champ1;champ2;champ.3;champ4;
 
SUNDEV:MUTUDEV:/home/sybase/prog/sebastien>cat test.lst | nawk -F\; '{ gsub(".",",",$3) } { print $1 ";" $2 ";" $3 ";" $4 }'
champ1;champ2;,,,,,,,;champ4
champ1;champ2;,,,,,,,;champ4
champ1;champ2;,,,,,,,;champ4
champ1;champ2;,,,,,,,;champ4
 
J'ai l'impression que le "." pause un problème.
Merci

n°434447
yannigperr
Posté le 18-03-2004 à 10:58:44  profilanswer
 

Bon, j'ai ta solution. Il suffit juste de remplacer "." par "\." parce qu'il s'agit d'une expression régulière mon petit gars ... Et que justement, le '.' représente tous les caractères (excepté le retour chariot, la fin et le début d'une expression).
 
Autre problème, le shell passe par là et interpréte tous les "\" pour les remplacer par les caractères spéciaux qu'ils sont censés représentés (\n,\t,\r etc). Comme il connait pas de \., il te remplace ça sans vergogne par '.'. Il faut donc doubler le \ ...
 
Bref voilà le résultat :
 
$ cat test.lst
champ1;champ2;champ.3;champ4;
champ1;champ2;champ.3;champ4;
champ1;champ2;champ.3;champ4;
champ1;champ2;champ.3;champ4;
 
$cat test.lst | nawk -F\; '{ gsub("\\.",",",$3) } { print $1 ";" $2 ";" $3 ";" $4 }'
 
Là, je pense que ton problème est résolu ...

n°434513
ls_one
Posté le 18-03-2004 à 13:02:36  profilanswer
 

En fait cela déspécialise le caractère et permet d'interpréter le point comme un point.
Merci pour ton aide.
a+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs

  Remplacement de caractères dans un champ d'un fichier tabulé

 

Sujets relatifs
Remplacement de caractères dans un champ d'un fichier tabuléLS sur un fichier sans changer les permissions
Serveur de fichier, quelques questions OS/MatosJe n'arrive pas a lire un fichier xml sur mon site
sed jusqu'à la fin du fichierProblème de jeu de caractères sous Linux via Samba
Plus de sujets relatifs à : Remplacement de caractères dans un champ d'un fichier tabulé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR