Awk et délimiteur

[Résolu/Fermé]
Signaler
-
Messages postés
222
Date d'inscription
mardi 29 janvier 2008
Statut
Membre
Dernière intervention
26 mars 2013
-
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

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
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 ?
Oui zipe31, il y a toujours 3 champs et seulement le 3e (et dernier) risque de contenir un tiret.
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
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

;-))
merci ! je crois que c'est ok, j'ai un peu bricolé pour remplacer ensuite la virgule par un tiret :

sed ':z;s/-/,/3;tz' fichier | awk -F'-' '{print $3}' | sed ':z;s/,/-/1;tz'
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
 sed ':z;s/-/,/3;tz' fichier | awk -F'-' '{print $3}' | sed 's/,/-/g'
Encore merci :)
Messages postés
222
Date d'inscription
mardi 29 janvier 2008
Statut
Membre
Dernière intervention
26 mars 2013
43
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.
Bonjour

La sortie est identique

$ cat fichier
argument1-argument2-argu-ment3
$ cat fichier |cut -d"-" -f3
argu
Messages postés
222
Date d'inscription
mardi 29 janvier 2008
Statut
Membre
Dernière intervention
26 mars 2013
43
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.
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.
Messages postés
222
Date d'inscription
mardi 29 janvier 2008
Statut
Membre
Dernière intervention
26 mars 2013
43
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.