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: