Awk et délimiteur contenu dans argument

[Fermé]
Signaler
-
Messages postés
18296
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
-
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

Messages postés
18296
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
5 410
hello
$ echo "jerome-dupont-contact-clientATemail.com" | awk -F'-' '{x=$3 FS $4 ; print x}'
contact-clientATemail.com
$ 
Hello & merci
ça pose un soucis dans le cas où il y a plusieurs tirets dans l'email.
Messages postés
18296
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
5 410
$ 
$ echo "jean-dupont-jean-dupont-persoATemail.com" | awk  'BEGIN{OFS=FS="-"} {$1=$2="" ; gsub(FS FS "+", "")} 1'
jean-dupont-persoATemail.com
$ 
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 425
Salut,

Avec "sed" :

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

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

$ 
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+
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 425
[^-]*-
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.