Craignant aussi d'être hors sujet j'avais envoyé une solution awk en privé.
alors voilà une proposition qui sépare les 2 champs sans boucle.
awk '
{
deuxpoints=index($0,":")
printf("premier champ %s deuxième champ %s
\n",substr($0,1,deuxpoints-1),substr($0,deuxpoints),length($0))
}
'
Le Vendredi 13 Décembre 2002 10:22, Michel Karatchentzeff a écrit :
> On Thu, 12 Dec 2002, anne aublanc wrote:
> > J'ai des lignes de ce type :
> >
> > totpages:1
> > ntries:0
> > ndials:3
> > sender:anne
> > jobid:44
> > jobtag:
> > pagehandling:21P
> > chopthreshold:3
> > !tiff:0::docq/doc44.tif
> >
> > Je veux séparer les 2 champs de la ligne. Le 1er champ va jusqu'au ":",
> > le 2ème c'est tout ce qui suit.
>
> Je suis peut être hors du sujet (cela dépend de la façon dont on veut
> traiter les données), mais j'ai l'impression que j'aurais abordé
> le problème avec awk
>
> awk 'BEGIN{FS=":"}{print$1}'
> choisit dans chaque ligne de l'entrée standard le caractère : comme
> séparateur de champ (FS = file separator)
> imprime sur la sortie standard le premier champ ($1)
> Il est alors facile de le mettre dans une variable
>
> premier_champ=`awk 'BEGIN{FS=":"}{print$1}'`
>
> (ne pas se tromper dans les accents).
>
> Si on veut grouper en un seul champ tout les autres champs, on peut se
> servir d'une boucle comme dans
>
> echo '!tiff:0::docq/doc44.tif' | awk 'BEGIN{FS=":"}{for (i = 1; i <= NF;
> i++) printf$i}'
>
> [les ' à la suite d'echo sont nécessaires à cause du !;
> le printf (qui fonctionne comme en C avec la même syntaxe)
> rassemble tout sur une me ligne]
>
> Michel
- --
- --
Benoit Lion
Inspection Académique de Chambéry
Tel : 04 79 62 53 19 Fax :06 15 53 56 70
web perso:
http://benoitlion.free.fr
web pro:
http://ia73.ac-grenoble.fr
PGP PUBLIC KEY
http://www.keyserver.net