Modifier le 3ème champ des lignes d'un fichier

Résolu
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaiterais modifier les 3eme champ de toutes les lignes d'un fichier dans le cas suivant:
TOTO_XXXX devient TOTO
si possible sans faire de boucle sur le fichier en traitant ligne par ligne avec les awk.

exemple:
champ1;champ2;TOTO_XXX;champ3;champ4
champ1;champ2;TITI;champ3;champ4
devient
champ1;champ2;TOTO;champ3;champ4
champ1;champ2;TITI;champ3;champ4

Merci!! ;-)
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

Voir ici, c'est le même principe.
0
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,

oui, c'est même moi qui ai posé la question mais j'ai du mal à l'adapter à la condition.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
$ cat fichier
champ1;champ2;TOTO_XXX;champ3;champ4
champ1;champ2;TITI;champ3;champ4
$ awk 'BEGIN {FS=OFS=";"} {$3=gensub("(TOTO).*", "\\1", 1, $3); print}' fichier
champ1;champ2;TOTO;champ3;champ4
champ1;champ2;TITI;champ3;champ4
0
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
Merci mais j'ai du mal formuler car le 3eme champ n'est pas forcement TOTO. Je dois extraire la partie gauche du 3eme champ si le 3eme champ contient "_"

et ça me sort une erreur:
awk: 0602-553 Function gensub is not defined.
The input line number is 1. The file is test.
The source line number is 1.


merci.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430 > bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
awk 'BEGIN {FS=OFS=";"} {$3=gensub("(.*)_.*", "\\1", 1, $3); print}'
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
supprime _ et tout ce qui suit
$ awk 'BEGIN {FS=OFS=";"} {sub("_.*$", "", $3); print}' fichier
champ1;champ2;TOTO;champ3;champ4
champ1;champ2;TITI;champ3;champ4
0
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
super. Merci.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
awk: 0602-553 Function gensub is not defined.
essayer avec gawk
0