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

 


Dernière réponse
Sujet : Remplacement de caractères dans un champ d'un fichier tabulé
ls_one En fait cela déspécialise le caractère et permet d'interpréter le point comme un point.
Merci pour ton aide.
a+

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
ls_one En fait cela déspécialise le caractère et permet d'interpréter le point comme un point.
Merci pour ton aide.
a+
yannigperr 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 ...
ls_one 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
yannigperr 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 !
ls_one /* 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.
ls_one 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
ls_one Merci beaucoup
yannigperr 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 !
ls_one 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 !

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)