mar 02

Fixer le bdf hpux

Tag: UnixUggla @ 10 h 56 min

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

4 commentaires pour “Fixer le bdf hpux”

    WavatarMisterT a dit le 8 mars 2011 à 11 h 10 min

    Bonne idée, et on pourrait tout faire en PERL:

    bdf | perl -pe 's/^\//###\//g ; s/\s+/\t/g ; s/\n//g ; s/###/\n/g' && echo 

    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:

    bdf | perl -pe 's%^/%###%g ; s/\s+/\t/g ; s/\n//g ; s%###%\n%g' && echo 

    WavatarUggla a dit le 8 mars 2011 à 14 h 28 min

    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é :oops: .
    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)}')

    WavatarUggla a dit le 16 mars 2011 à 10 h 49 min

    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.

    bdf | perl -pe 's%^([a-z/])%###\1%g ; s/\s+/\t/g ; s/\n//g ; s%###%\n%g' && echo
    

    WavatarUggla a dit le 16 mars 2011 à 11 h 20 min

    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 )

    bdf | perl -pe '{s%^([a-z/])%###\1%g ; s%\s+%\t%g ; s/\n//g ; s%###%\n%g ;
    (undef,$s,$sa,$su)=split(/\t/) ; $t+=$s;$ta+=$sa;$tu+=$su } ;
    END{printf("\n\nTotal : %.2f MB %.2f MB %.2f MB\n", $t/1024,$ta/1024,$tu/1024)}'
    

    Ce qui donne le résultat suivant :

    Filesystem      kbytes  used    avail   %used   Mounted on
    /dev/vg00/lvol3 1048576 744032  302392  71%     /
    /dev/vg00/lvol1 1835008 498912  1325720 27%     /stand
    /dev/vg00/lvol9 8912896 4173488 4702536 47%     /var
    /dev/vg00/lvol5 12386304        9872057 2357132 81%     /var/adm/crash
    /dev/vg00/lvol8 5046272 3115640 1915600 62%     /usr
    /dev/vg00/lvol4 1048576 527176  518656  50%     /tmp
    /dev/vg01/lvol3 18874368        14773225        3844828 79%     /oradata/common
    /dev/vg01/lvol5 5144576 4095777 983255  81%     /oradata/AGOLFRR2/backup
    /dev/vg01/lvol4 80740352        57989216        21329293        73%     /oradata/AGOLFRR1/export
    /dev/vg00/lvol7 7192576 6248888 936352  87%     /opt
    /dev/vg00/lvol6 1048576 516832  527688  49%     /home
    /dev/vg01/lvol1 31457280        28029767        3213411 90%     /appl
    fsucdio.fr.adecco.net:/cdio_uat         13623056        4615216 9007840 34%     /cdio
    
    Total : 183943.77 MB 132031.47 MB 49770.22 MB
    

Vous devez être connecté pour publier un commentaire.