Awk et délimiteur

Résolu
raymond -  
MyTux Messages postés 222 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   6 430
 
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
raymond
 
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   Statut Membre Dernière intervention   44
 
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   Statut Contributeur Dernière intervention   6 430
 
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
raymond
 
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   Statut Contributeur Dernière intervention   6 430
 
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   Statut Membre Dernière intervention   44
 
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
raymond
 
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   Statut Membre Dernière intervention   44
 
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
raymond
 
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   Statut Membre Dernière intervention   44
 
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