mar 02
Fixer le bdf hpux
Le bdf hpux fait parfois un retour chariot pénible comme ci dessous avec /appl/autotree.
Le problème est que l’on a plus même nombre de colonnes (5 au lieu de 6), ce qui empêche de faire des sommes.
root@hx04031a: /root/home/root # bdf
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lvol3 1048576 298432 744424 29% /
/dev/vg00/lvol1 1835008 329800 1493520 18% /stand
/dev/vg00/lvol8 8912896 7199008 1703728 81% /var
/dev/vg00/lvol9 10485760 3833009 6238725 38% /var/adm/crash
/dev/vg00/lvol7 5505024 3088424 2397816 56% /usr
/dev/vg00/lvol4 524288 115672 405496 22% /tmp
/dev/vg00/lvol6 9633792 6518920 3090656 68% /opt
/dev/vg00/lvol5 131072 16248 113960 12% /home
/dev/vg00/lvautotree
1048576 41159 944483 4% /appl/autotree
La « commande » ci dessus utilise perl pour fixer le problème.
root@hx04031a: /root/home/root # bdf | sed 's/^\//###\//g' | perl -pe 's/\s+/\t/g' | perl -pe 's/\n//g' | perl -pe 's/###/\n/g' && echo
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lvol3 1048576 298496 744360 29% /
/dev/vg00/lvol1 1835008 329800 1493520 18% /stand
/dev/vg00/lvol8 8912896 7199016 1703728 81% /var
/dev/vg00/lvol9 10485760 3833009 6238725 38% /var/adm/crash
/dev/vg00/lvol7 5505024 3088424 2397816 56% /usr
/dev/vg00/lvol4 524288 115672 405496 22% /tmp
/dev/vg00/lvol6 9633792 6518920 3090656 68% /opt
/dev/vg00/lvol5 131072 16248 113960 12% /home
/dev/vg00/lvautotree 1048576 41159 944483 4% /appl/autotree
On peut donc maintenant sommer les colonnes.
bdf | sed 's/^\//###\//g' | perl -pe 's/\s+/\t/g' | perl -pe 's/\n//g' | perl -pe 's/###/\n/g' \
| awk '{sumt+=$2;sumu+=$3;suma+=$4}END{printf("Total : %.2f %.2f %.2f\n",sumt/1024,sumu/1024,suma/1024)}'
Total : 38208.00 20938.31 16731.11
Bonne idée, et on pourrait tout faire en PERL:
Et comme PERL est notre ami, il n’oblige pas d’utiliser le slash (/) comme séparateur dans la substitution, ce qui évite bien souvent des backslashes:
Effectivement c’est bien plus optimisé, 1 seul fork de perl au lieu de 3….
J’avoue ne pas avoir trop cherché a faire beau et optimisé .
Le coup de « # » au lieu de « / » marche aussi avec sed.
Bon MisterT, et pour l’équivalent du awk en perl ca donne quoi ? Histoire d’etre full perl !
(
awk '{sumt+=$2;sumu+=$3;suma+=$4}END{printf("Total : %.2f %.2f %.2f\n",sumt/1024,sumu/1024,suma/1024)}'
)Une petite correction pour :
Remettre le slash retirer par la première regex.
Rendre le truc plus générique en gérant les montages NFS.
Bon comme MisterT a pas l’air motivé pour donner la solution au challenge ci dessus…
Voila une solution full perl qui doit pouvoir être améliorée. ( voir option « -a » http://articles.mongueurs.net/magazines/linuxmag50.html )
Ce qui donne le résultat suivant :