[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Différence entre Squeeze et Wheezy dans l'exécution d'une commande



Le mercredi 27 février 2013 à 14:25:40, Jean-Jacques Doti a 
écrit :
> Bonjour,

’jour,

>[…]
> > TAILLE=`/bin/df | /bin/grep \/backup | /usr/bin/awk
> > '{printf ("%s",$4)}' | /bin/sed 's/%//g'`

  Arggh !  Faudrait choisir, grep, awk ou sed, les trois à la 
suite c’est — euh, restons poli — affreux !

  Choisis-en un !

grep :

 LANG=C /bin/df -P |      \
     grep -F /backup |    \   # bonne ligne (pas besoin de \)
     grep -o '[0-9]\+%' | \   # seulement la colonne %
     grep -o '[0-9]\+'        # seulement les chiffres

 (Pas ma préférée…)

awk :

  LANG=C /bin/df -P | \
     awk '/\/backup/ { sub("%", "", $5); print $5 }'

  # sur les lignes contenant /backup,
  # enlève le % du 5e champ
  # imprime le 5e champ

sed :

 LANG=C /bin/df -P | \
   /bin/sed -ne '/\/backup/ {s/.*\s\([0-9]*\)%.*/\1/;p}'

 -n           = ne pas imprimer
 /\/backup/   = ne traiter que les lignes contenant /backup
 { s/…//; p } = appliquer la substitution (s) puis imprimer (p)
                s/…/\1/ = récupérer seulement les chiffres entre 
                          un espace (\s) et le %


  J’aurais tendance à le faire avec sed mais je me rends compte 
que awk est plus clair…

  Hmm, awk est sans doute aussi le plus robuste si [0-9]% peut 
se trouver ailleurs dans la ligne (autre montage p.ex.).

>[…]
> Avec la version de df (paquet coreutils) sous wheezy,
> l'affichage POSIX se fait par défaut, ce qui explique le
> changement de comportement.
> 
> Moralité : il faut *toujours* utiliser l'option -P de df
> lorsqu'on l'utilise dans des scripts.

  Et aussi toujours bien placer la locale (LANG=C pour rester 
POSIX), ça évite d’avoir des résultats très bizarres, p.ex. 
quand on attend des points et qu’on a des virgules ou que l’on 
cherche 'addr' alors qu’il n’y a que 'adr'…

-- 
 Sylvain Sauvage


Reply to: