Awk et délimiteur contenu dans argument

Romulus -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Note : J'ai du remplacer tous les AROBASES par AT car le site ne me laissait pas poster le message.

Pour un script j'ai besoin de décortiquer comme ceci :

$ cat fichier
jerome-dupont-contactATemail.com

cat fichier | awk -F '-' '{ print $1}'
jerome

cat fichier | awk -F '-' '{ print $2}'
dupont

cat fichier | awk -F '-' '{ print $3}'
contactATemail.com


MAIS, si (noter le '-' dans l'email qui est contact-clientATemail.com)

$ cat fichier
jerome-dupont-contact-clientATemail.com

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


Je souhaite que awk considère que tout ce qu'il y a après le second délimiteur (-) soit considéré comme étant entier. Comment faire ?

Merci d'avance

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ echo "jerome-dupont-contact-clientATemail.com" | awk -F'-' '{x=$3 FS $4 ; print x}'
    contact-clientATemail.com
    $ 
    0
    1. Romulus
       
      Hello & merci
      ça pose un soucis dans le cas où il y a plusieurs tirets dans l'email.
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      $ 
      $ echo "jean-dupont-jean-dupont-persoATemail.com" | awk  'BEGIN{OFS=FS="-"} {$1=$2="" ; gsub(FS FS "+", "")} 1'
      jean-dupont-persoATemail.com
      $ 
      
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Avec "sed" :

    $ cat fich 
    jerome-dupont-contact-clientATemail.com
    jerome-dupont-contactclientATemail.com
    
    $ sed 's/[^-]*-[^-]*-//' fich 
    contact-clientATemail.com
    contactclientATemail.com
    
    $ 
    0
    1. Romulus
       
      Hello

      Parfait :)

      cat fich
      jean-dupont-jean-dupont-persoATemail.com
      
      sed 's/[^-]*-[^-]*-//' fich
      jean-dupont-persoATemail.com


      Je me demande juste comment ça fonctionne car je n'arrive pas à interpréter cette commande ?
      a+
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      [^-]*-
      Permet de capturer tout ce qui se trouve avant un tiret, à l'exception du tiret lui même dès que celui-ci est rencontré (d'où la présence du tiret après l'astérisque pour l'inclure dans le motif). Combiné deux fois de suite, permet de matcher les 2 premiers tirets.
      0