Awk et délimiteur

Résolu/Fermé
raymond - Modifié par raymond le 14/12/2010 à 15:10
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 - 14 déc. 2010 à 15:36
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

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 déc. 2010 à 14:17
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 ?
0
Salut,

J'ai essayé de changer le délimiteur au moment ou le fichier est créé (script ajax) mais ça ne fonctionnait pas. Vu comme j'ai eu du mal à faire fonctionner ce script ajax, j'aurais préféré intervenir sur la commande awk directement. Je me suis dit qu'il y avait peut-être moyen de dire à la commande qu'après le second délimiteur c'est terminé ?
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
14 déc. 2010 à 15:15
Re,

Alors essaie ainsi:
awk -F"-" '{print $1}' fichier


$1 = 1er Arg
$2 = 2em Arg
...
$n = Nem Arg

Bien à toi,
MyTux.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 déc. 2010 à 15:18
Il n'y a toujours que 3 champs à prendre en considérations ?
Et les 2 premiers champs sont délimités par un tiret, sans que rien n'interfère comme dans le 3ème chanp ?
0
Oui zipe31, il y a toujours 3 champs et seulement le 3e (et dernier) risque de contenir un tiret.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 déc. 2010 à 15:26
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

;-))
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
14 déc. 2010 à 14:55
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.
0
Bonjour

La sortie est identique

$ cat fichier
argument1-argument2-argu-ment3
$ cat fichier |cut -d"-" -f3
argu
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
14 déc. 2010 à 15:19
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.
0
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.
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
14 déc. 2010 à 15:36
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.
0