Awk et délimiteur

Résolu
raymond -  
MyTux Messages postés 228 Statut Membre -
Bonjour,

J'ai un soucis avec un petit script

$ cat fichier 
argument1-argument2-argument3 

$ cat fichier | awk -F '-' '{ print $3 }' 
argument3 


Mais parfois, argument3 est marqué comme ça : argu-ment-3 et du coup :
cat fichier | awk -F '-' '{ print $3 }' 
argu 


Comment faire pour obtenir l'argument en entier svp ? J'ai essayé de changer le délimiteur pour ", ', ', | mais ça ne passe pas dans mon script (qui est lié à un script ajax et autres).

Existe-t-il une recette simple pour résoudre mon soucis.

Merci

2 réponses

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

    Sans changer de délimiteur je ne vois pas trop comment tu pourrais arriver à tes fins ;-(

    Quand tu dis "J'ai essayé de changer le délimiteur pour ", ', ', |", à quel niveau ? Au niveau du fichier ou de la commande awk ?
    0
    1. raymond
       
      Salut,

      J'ai essayé de changer le délimiteur au moment ou le fichier est créé (script ajax) mais ça ne fonctionnait pas. Vu comme j'ai eu du mal à faire fonctionner ce script ajax, j'aurais préféré intervenir sur la commande awk directement. Je me suis dit qu'il y avait peut-être moyen de dire à la commande qu'après le second délimiteur c'est terminé ?
      0
    2. MyTux Messages postés 228 Statut Membre 44
       
      Re,

      Alors essaie ainsi:
      awk -F"-" '{print $1}' fichier


      $1 = 1er Arg
      $2 = 2em Arg
      ...
      $n = Nem Arg

      Bien à toi,
      MyTux.
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il n'y a toujours que 3 champs à prendre en considérations ?
      Et les 2 premiers champs sont délimités par un tiret, sans que rien n'interfère comme dans le 3ème chanp ?
      0
    4. raymond
       
      Oui zipe31, il y a toujours 3 champs et seulement le 3e (et dernier) risque de contenir un tiret.
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      A ce moment là tu pourrais essayer de convertir seulement les tirets au-delà du 3ème champ avant d'appliquer ta commande awk :

      $ cat fichier
      argument1-argument2-argument3
      argument1-argument2-arg-ume-nt3
      
      $ sed ':z;s/-/,/3;tz' fichier | awk -F'-' '{print $3}'
      argument3
      arg,ume,nt3

      ;-))
      0
  2. MyTux Messages postés 228 Statut Membre 44
     
    Bonjour,

    Si ton délimiteur est toujours '-', tu peux transformer ta commande:
    cat fichier | awk -F '-' '{ print $3 }' 


    en:

    cat fichier |cut -d"-" -f3


    Bien à toi,
    MyTux.
    0
    1. raymond
       
      Bonjour

      La sortie est identique

      $ cat fichier
      argument1-argument2-argu-ment3
      $ cat fichier |cut -d"-" -f3
      argu
      
      0
    2. MyTux Messages postés 228 Statut Membre 44
       
      Je suis désolé je n'avais pas vu le argu-ment3 qui est parfois écrit ainsi. Peux - tu donner un exemple de contenu de ton fichier? Car je doute que le contenu soit argument1-argument2-argument3 ^^.

      Bien à toi,
      MyTux.
      0
    3. raymond
       
      par exemple :

      john-www.myblog.fr-john.doe@yahoo.fr
      

      Là tout fonctionne, mais si j'ai

      john-www.myblog.fr-john-doe@yahoo.fr
      

      ça coince.
      0
    4. MyTux Messages postés 228 Statut Membre 44
       
      Je rejoins l'avis de zipe31, il faudrait prendre un autre délimiteur tel que # ou autre rarement utilisé. C'est la solution la plus rapide.

      Bien à toi,
      MyTux.
      0