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

Résolu
bob737 Messages postés 157 Statut Membre -  
dubcek Messages postés 18627 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!! ;-)

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Voir ici, c'est le même principe.
    0
    1. bob737 Messages postés 157 Statut Membre
       
      bonjour,

      oui, c'est même moi qui ai posé la question mais j'ai du mal à l'adapter à la condition.
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    1. bob737 Messages postés 157 Statut Membre
       
      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
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > bob737 Messages postés 157 Statut Membre
         
        awk 'BEGIN {FS=OFS=";"} {$3=gensub("(.*)_.*", "\\1", 1, $3); print}'
        0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      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
      1. bob737 Messages postés 157 Statut Membre > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        super. Merci.
        0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      awk: 0602-553 Function gensub is not defined.
      essayer avec gawk
      0