Awk et délimiteur contenu dans argument

Fermé
Romulus - 15 mai 2012 à 09:55
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 15 mai 2012 à 12:24
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
15 mai 2012 à 10:08
hello
$ echo "jerome-dupont-contact-clientATemail.com" | awk -F'-' '{x=$3 FS $4 ; print x}'
contact-clientATemail.com
$ 
0
Hello & merci
ça pose un soucis dans le cas où il y a plusieurs tirets dans l'email.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
15 mai 2012 à 12:24
$ 
$ 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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
15 mai 2012 à 10:54
Salut,

Avec "sed" :

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

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

$ 
0
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
15 mai 2012 à 11:25
[^-]*-
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