[gull] Questions sur un script bash

Félix Hauri felix at f-hauri.ch
Fri Aug 13 00:04:02 CEST 2004


On Thu, Aug 12, 2004 at 01:44:47AM +0200, Stéphane Graber wrote:
> Le Thu, Aug 12, 2004 at 01:16:31AM +0200, WaVeR a ecrit :
> > Le jeu 12/08/2004 à 00:37, Chris De Bleu a écrit :
> > > bonjour,
> > > 
> > > Sous bash, j'ai recupere de la lecture d'un fichier la
> > > ligne suivante
> > > dd 2 2 0 40 ~488 40 POB /dev/chunk
> > > et je voudrais lire le nombre 488. J'ai fait ceci
> > > 
> > > nn=`head -1 myfile |awk '{print $6}'`
> > > 
> > > le probleme, c'est que j'obtiens ~488 et c'est normal.
> > > 
> > > Comment faire pour avoir seulement 488?
> > 
> > tu passes le résultat à sed
> > nn=`head -1 myfile | awk '{print $6}' | sed -e 's/~//"`
> > 
> > Salutations.
> > > Merci
> ...
> J'ai été plus rapide de trois minutes :)
> Au moin ca prouve que ma solution doit être la bonne.

Qu'est-ce que ``la bonne'' solution?

1: Uniquement bash (sans autre binaire: head, awk, sed, etc.):
   $ read -a nn <myfile
   $ echo ${nn[5]#\~}
   488

2: Uniquement sed, sans même bash, ou autre head, awk, etc.
   $ nn=$(sed 's/^.* ~\([0-9]*\) .*$/\1/;q' <myfile)
   $ echo $nn
   488

3: En passant par le même chemin que celui proposé, mais en utilisant
   la commande tr, qui dans ce cas sera un poil plus rapide:
   $ nn=$(head -1 myfile | awk '{print $6}' | tr -d \~)
   $ echo $nn
   488

4: En n'utilisant que awk:
   $ nn=$(awk '{print substr($6,2);exit}' <myfile)
   $ echo $nn
   488

5: perl:
   $ nn=$(perl -pe '/^.* ~(\d*) .*$/;print $1;exit' <myfile)
   $ echo $nn
   488

6, 7, 8... Il n'existe pas UNE ``bonne solution'', mais suivant le contexte, 
le but, les limitations, il en existe une quasi infinité.

A noter que dans mes exemples, j'utilise la syntaxe `` $(liste de commande) '' 
plutôt que le backtick `` `liste de commande` ''. L'effet est le même à savoir
que dans les deux cas un sous-shell est exécuté et la sortie standard de ce 
sous-shell, est transmise en arguements au reste de la ligne, mais la syntaxe 
utilisant les parenthèse présente deux avantages: Elle est plus lisible et est 
plus facilement imbriquable.

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch



More information about the gull mailing list