[CentOS-de] df verschönern

Frank Thommen frank.thommen at embl-heidelberg.de
Do Nov 17 07:27:19 EST 2011


Hallo Wolfgang,

> habe nachfolgendes Skript gefunden.
> Wer kennt sich aus um die Ausgabe der Balken an der Länge
> des grössten Medienname (siehe weiter unten) zu richten.
>
>
> (gefundenes Skript)
> df | awk 'headline==0 { printf("%-12s %4s\n", $6, $5); headline=1 }; $1
> ~ /^\/]*/ { d=int(substr($5,1,length($5)-1)/2); \
> b=""; { for(i=1; i<=d; i++) b=b"#" }; { for(i=d; i<=50; i++) b=b"-" }; printf("%-12s %4s %s\n", $6, $5, b ) }'
>
>
> (Ausgabe)
> [user1 at dex ~]$ df | awk 'headline==0 { printf("%-12s %4s\n", $6, $5); headline=1 }; $1 ~ /^\/]*/ { d=int(substr($5,1,length($5)-1)/2); \
> b=""; { for(i=1; i<=d; i++) b=b"#" }; { for(i=d; i<=50; i++) b=b"-" }; printf("%-12s %4s %s\n", $6, $5, b ) }'
> Eingehängt  Ben%
> /             67% #################################------------------
> /boot         21% ##########-----------------------------------------
> /HD500        41% ####################-------------------------------
> /HD80         22% ###########----------------------------------------
> /HD160        42% #####################------------------------------
> /media/disk   27% #############--------------------------------------
> /media/1.2.9-19-i686-pae 100% ##################################################-
> /media/HD750  17% ########-------------------------------------------
> /media/HD750-Part2  44% ######################-----------------------------
>
>
> Mein Ausgabewunsch:
> /                         67% #################################------------------
> /boot                     21% ##########-----------------------------------------
> /HD500                    41% ####################-------------------------------
> /HD80                     22% ###########----------------------------------------
> /HD160                    42% #####################------------------------------
> /media/disk               27% #############--------------------------------------
> /media/1.2.9-19-i686-pae 100% ##################################################-
> /media/HD750              17% ########-------------------------------------------
> /media/HD750-Part2        44% ######################-----------------------------

Vielleicht so:

----------------
df -P | awk 'BEGIN {max=0; n=1};\
   { if (length($6) > max) {max=length($6)}; \
     mount[n]=$6; cap[n]=$5; n++ \
   } \
   END {\
     N=1; printf("%-"max"s %s\n", mount[N], cap[N]); N++;  # headline \
     for (N=N; N<n; N++) {\
       { d=int(substr(cap[N],1,length(cap[N])-1)/2); b=""; \
       { for(i=1; i<=d; i++) b=b"#" }; \
          { for(i=d; i<=50; i++) b=b"-" }; printf("%-"max"s %4s %s\n", 
mount[N], cap[N], b ) \
       }\
     } \
   }'
----------------

Erst mal `df -P`, damit lange Pfadnamen, welche die Zahlen auf die 
zweite Zeile druecken, keine Probleme verursachen.

Die Eliminierung von nicht-lokalen und speziellen Filesystemen (tmpfs 
etc.: '$1 ~ /^\/]*/') habe ich rausgenommen.  Das kann man jederzeit 
wieder einfuegen.

Dann eine Schlaufe durch alle Ausgabezeilen von `df -P`, wobei ich 
jeweils Mountpunkt und Kapazitaet in den Arrays mount[] und cap[] 
speichere, die Laenge des Pfades des Mountpunktes messe und 'max' auf 
die bisher laengste gemessene Laenge setze.  Bisher findet kein Ausgabe 
statt.

Erst am Ende des Skriptes (END{}) loope ich durch mount[] und cap[] und 
schreibe die Daten heraus.  Die erste Zeile behandle ich speziell, da 
sie nur die Headerzeile beinhaltet und keine Kapazitaetsangaben.

Das Ganze sieht jetzt so aus:

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5            108254948  43818664  58848480  43% /
tmpfs                  1957948        12   1957936   1% /dev/shm
home:/home/fthommen  298844160 163278528 135565632  55% /home/fthommen
home:/home/xsoft     298844160 163278528 135565632  55% /home/xsoft
software:/software   104857600     67136 104790464   1% /g/software
structures.embl.de:/struct/software/linux/pymol-1.4.1
                      209715200  97551552 112163648  47% 
/g/software/linux/pack/pymol-1.4.1
structures.embl.de:/struct/software/linux/glew-1.4.0
                      209715200  97551552 112163648  47% 
/g/software/linux/pack/glew-1.4.0
#


# df -P
Filesystem         1024-blocks      Used Available Capacity Mounted on
/dev/sda5            108254948  43818664  58848480      43% /
tmpfs                  1957948        12   1957936       1% /dev/shm
home:/home/fthommen  298844160 163277696 135566464      55% /home/fthommen
home:/home/xsoft     298844160 163277696 135566464      55% /home/xsoft
software:/software   104857600     67136 104790464       1% /g/software
structures.embl.de:/struct/software/linux/pymol-1.4.1 209715200 
97551552 112163648      47% /g/software/linux/pack/pymol-1.4.1
structures.embl.de:/struct/software/linux/glew-1.4.0 209715200  97551552 
112163648      47% /g/software/linux/pack/glew-1.4.0
#

# mydf
Mounted                             Capacity
/                                   43% 
#####################------------------------------
/dev/shm                             1% 
---------------------------------------------------
/home/fthommen                      55% 
###########################------------------------
/home/xsoft                         55% 
###########################------------------------
/g/software                          1% 
---------------------------------------------------
/g/software/linux/pack/pymol-1.4.1  47% 
#######################----------------------------
/g/software/linux/pack/glew-1.4.0   47% 
#######################----------------------------
#


Gruss

     frank