Modifier le 3ème champ des lignes d'un fichier [Résolu/Fermé]

Signaler
Messages postés
115
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 avril 2021
-
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
-
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!! ;-)

2 réponses

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 233
Salut,

Voir ici, c'est le même principe.
Messages postés
115
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 avril 2021

bonjour,

oui, c'est même moi qui ai posé la question mais j'ai du mal à l'adapter à la condition.
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 308
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
Messages postés
115
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 avril 2021

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.
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 233 >
Messages postés
115
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 avril 2021

awk 'BEGIN {FS=OFS=";"} {$3=gensub("(.*)_.*", "\\1", 1, $3); print}'
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 308
supprime _ et tout ce qui suit
$ awk 'BEGIN {FS=OFS=";"} {sub("_.*$", "", $3); print}' fichier
champ1;champ2;TOTO;champ3;champ4
champ1;champ2;TITI;champ3;champ4
Messages postés
115
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 avril 2021
>
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021

super. Merci.
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 308
awk: 0602-553 Function gensub is not defined.
essayer avec gawk