[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