2011/8/1 newbie01 perl <newbie01.p...@gmail.com> > > Hi all, > > Hi!
> I have several *nix version of Unix and while some I can use df -h, for > some I can't. The only common thing that I can use that works for all is df > -k. > > ======================================== > Below is the output when running df -k: > ======================================== > > Filesystem kbytes used avail capacity Mounted on > /dev/md/dsk/d1 8268461 4133009 4052768 51% / > /proc 0 0 0 0% /proc > mnttab 0 0 0 0% /etc/mnttab > fd 0 0 0 0% /dev/fd > /dev/md/dsk/d3 8268461 5751241 2434536 71% /var > swap 46176776 64 46176712 1% /var/run > dmpfs 46176712 0 46176712 0% /dev/vx/dmp > dmpfs 46176712 0 46176712 0% /dev/vx/rdmp > swap 53453216 7276504 46176712 14% /tmp > /dev/md/dsk/d4 16526762 8075725 8285770 50% /opt > /dev/vx/dsk/dg_volarch/SUNWspro > 6094894 5173296 860650 86% /opt/SUNWspro.local > /dev/vx/dsk/dg_volarch/volarch > 83886080 61130760 22577632 74% /vx_mnt/volarch > aklns001:/vol/vol_admin/public > 322355200 291922136 30433064 91% /nas_mnt/public > /dev/odm 0 0 0 0% /dev/odm > aklns002:/vol/vol_admin/prodhome > 33646592 25395656 8250936 76% /home/users > /vol/dev/dsk/c0t0d0/sol_10_1008_sparc > 2599020 2599020 0 100% > /cdrom/sol_10_1008_sparc > aklns003-va2:/vol/vol_aftp/aftp/app > 48179200 39619484 8559716 83% > /nas_mnt/aklns022/app_aftp > /dev/vx/dsk/dg_ico/prod01_db > 188743680 136754136 51583424 73% > /vx_mnt/db/prod01 > /dev/vx/dsk/dg_ico/prod01_app > 52428800 31237744 21030000 60% > /vx_mnt/app/prod01 > > Interestingly, if I re-direct the output to a file, I get one line for each > which is a lot better than the screen output. For example, if I do df -k > > /tmp/x, the contents of /tmp/x is as below: > > > Filesystem kbytes used avail capacity Mounted on > /dev/md/dsk/d1 8268461 4133009 4052768 51% / > /proc 0 0 0 0% /proc > mnttab 0 0 0 0% /etc/mnttab > fd 0 0 0 0% /dev/fd > /dev/md/dsk/d3 8268461 5750757 2435020 71% /var > swap 45929352 64 45929288 1% /var/run > dmpfs 45929288 0 45929288 0% /dev/vx/dmp > dmpfs 45929288 0 45929288 0% /dev/vx/rdmp > swap 53205808 7276520 45929288 14% /tmp > /dev/md/dsk/d4 16526762 8079410 8282085 50% /opt > /dev/vx/dsk/dg_volarch/SUNWspro 6094894 5173296 860650 86% > /opt/SUNWspro.local > /dev/vx/dsk/dg_volarch/volarch 83886080 61184016 22524792 74% > /vx_mnt/volarch > aklns001:/vol/vol_admin/public 322355200 291933108 30422092 91% > /nas_mnt/public > /dev/odm 0 0 0 0% /dev/odm > aklns002:/vol/vol_admin/prodhome 33646592 25395684 8250908 76% > /home/users > /vol/dev/dsk/c0t0d0/sol_10_1008_sparc 2599020 2599020 0 100% > /cdrom/sol_10_1008_sparc > aklns003-va2:/vol/vol_aftp/aftp/app 48179200 39619484 8559716 83% > /nas_mnt/aklns022/app_aftp > /dev/vx/dsk/dg_ico/prod01_db 188743680 136754136 51583424 73% > /vx_mnt/db/prod01 > /dev/vx/dsk/dg_ico/prod01_app 52428800 31239768 21027992 60% > /vx_mnt/app/prod01 > > I've attached a screenshot of the desired output that am hoping to have. > Tried to paste the manual formatting that I did but it comes out jagged > similar to the output to a file. > > At the moment, only way I can think of getting the kind of formatting that > am wanting to have is to do as below: > - Read each line of the df output where each column of the line is a > separate field > - Count the number of characters for each respective field > - Note down what is the max characters for each respective field, this will > be the max number of characters + 10 for each field, each column that is > less than this max characters will be padded with spaces > - Then print out each line left-justified using Perl print formatting > > Can you get to CPAN modules? I'd use e.g. Text::Table: use strict; use warnings; use Text::Table; my $tb = Text::Table->new( 'Filesystem', 'kbytes','used', 'avail', 'capacity', 'Mounted on', ); while(<DATA>){ $tb->load($_); } print $tb; __DATA__ /dev/md/dsk/d1 8268461 4133009 4052768 51% / /proc 0 0 0 0% /proc mnttab 0 0 0 0% /etc/mnttab Not sure if this is the best way to format the output to the one that I want > to but can't think of any way of doing it. > > Preferably, would want to be able to show the df output in GB/MB as well. > That means I have to do my own conversion since some of the Solaris/*nix > that I have does not have the -h option. That should be the next objective > once I've figure out how to do the format thingy. my $mb = $kb * 1024; my $gb = $mb * 1024; BTW, am using the system command or backticks to run df -k. > > Hopefully, the df output to file will always be one line for each. Any > suggestion will be much appreciated. Thanks in advance. > HTH cheers paolino > > > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > -- Paolo Gianrossi (An unmatched left parenthesis creates an unresolved tension that will stay with you all day -- xkcd