Awk et délimiteur contenu dans argument

Romulus -  
dubcek Messages postés 18789 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

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

Avec "sed" :

$ cat fich 
jerome-dupont-contact-clientATemail.com
jerome-dupont-contactclientATemail.com

$ sed 's/[^-]*-[^-]*-//' fich 
contact-clientATemail.com
contactclientATemail.com

$ 
0
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
[^-]*-
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