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

Résolu/Fermé
bob737 Messages postés 127 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 juillet 2022 - Modifié par bob737 le 20/07/2016 à 10:37
dubcek Messages postés 18567 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 1 décembre 2022 - 20 juil. 2016 à 13:03
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 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 560
20 juil. 2016 à 10:43
Salut,

Voir ici, c'est le même principe.
0
bob737 Messages postés 127 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 juillet 2022
20 juil. 2016 à 11:09
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 18567 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 1 décembre 2022 5 568
20 juil. 2016 à 11:34
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 127 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 juillet 2022
Modifié par bob737 le 20/07/2016 à 12:00
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 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 560 > bob737 Messages postés 127 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 juillet 2022
20 juil. 2016 à 12:11
awk 'BEGIN {FS=OFS=";"} {$3=gensub("(.*)_.*", "\\1", 1, $3); print}'
0
dubcek Messages postés 18567 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 1 décembre 2022 5 568
Modifié par dubcek le 20/07/2016 à 12:13
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 127 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 juillet 2022 > dubcek Messages postés 18567 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 1 décembre 2022
20 juil. 2016 à 12:46
super. Merci.
0
dubcek Messages postés 18567 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 1 décembre 2022 5 568
20 juil. 2016 à 13:03
awk: 0602-553 Function gensub is not defined.
essayer avec gawk
0