Hi all,

Am trying to write/convert a customized df script in Perl and need some help
with regards to using arrays and file handlers.

At the moment am using

system("df -k > /tmp/df_tmp.00");

To re-direct the df output. Am using df -k because some of the Solaris and
HP servers does not have df -h, by using df -k, am sure it will work on all
of them.

Sample output is as below:

Filesystem            kbytes    used   avail capacity  Mounted on
/dev/md/dsk/d1       3099287 2482045  555257    82%    /
/proc                      0       0       0     0%    /proc
mnttab                     0       0       0     0%    /etc/mnttab
fd                         0       0       0     0%    /dev/fd
/dev/md/dsk/d3       3099287 1595167 1442135    53%    /var
swap                 8663192     368 8662824     1%    /var/run
swap                 8717624   54800 8662824     1%    /tmp
/dev/md/dsk/d4       5003466 4330989  622443    88%    /opt
dev0ns951:/vol/vol_admin/common 321912832 266888556 55024276    83%
/nas_mnt/common
dev0ns951:/vol/vol_admin/admin/cpadocs 39741440 32961924 6779516    83%
/opt/info
dev0ns951:/vol/vol_admin/admin 39741440 32961924 6779516    83%
/nas_mnt/admin
dev0ns951:/vol/vol_admin/docs 8468480 7245924 1222556    86%
/nas_mnt/docs
dev0ns951:/vol/vol_admin/prodhome 33658880 26586948 7071932    79%
/nas_mnt/prodhome
dev0ns951:/vol/vol_admin/saphome   92160   37960   54200    42%
/nas_mnt/saphome
dev0ns951:/vol/vol_admin/prodhome 33658880 26586948 7071932    79%
/home/users

Then I get rid of the header as below, more dependence on using Unix OS
commands, sorry Perl gurus, don't know what's the equivalent of the commands
below in Perl :-)

$num_lines=`wc -l /tmp/df_${processid}.00 | awk '{ print \$1 }'`;
$num_lines=$num_lines-1;
system("tail -${num_lines} /tmp/df_tmp.00 > /tmp/df_tmp.01");

Then I do the lines below which read each line to an array:

open(DFTMP, "/tmp/df_tmp.01");
while ( <DFTMP> )
{
   chomp;
   @df_lines= split(' ',$_);
}
close DFTMP;

My question is, first of all, how to do an array operation where I can
operate on the field/column 2,3,4 where I can divide them by 1024 or
1024/1024 so their KB values are converted to MB or GB? Or do I have to
foreach each array member and do the division line by line? Would be nice if
I can use the df header as hash references :-)

Also need to be able to get the max(length) of each column so I can use it
for formatting the output and I can't find a Perl max or min function :(-

BTW, if anyone is interested to know what am trying to do, I've attached a
version of the script in Korn shell.

Am wanting to convert it to Perl 'coz I have a server that has 30+ lines of
df output and it takes ages to run using Korn shell. I am hoping that it
will run faster in Perl, John W. Krahn had proven that to be case lots of
times, thanks John :-)

Plus it is a good exercise to learn Perl arrays and sorting too.

Any advise/feedback much appreciated. Thanks in advance.

Sample output of the run using the Korn shell script as below:

Filesystem                                        MBytes      Used     Avail
Capacity Mount
---------------------------------------------  --------- --------- ---------
-------- -----------------------------------
/dev/md/dsk/d1                                   3027-MB   2424-MB
542-MB      82% /
/dev/md/dsk/d3                                   3027-MB   1560-MB
1406-MB      53% /var
/dev/md/dsk/d4                                   4886-MB   4229-MB
608-MB      88% /opt
/proc                                               0-MB      0-MB
0-MB       0% /proc
dev0ns951:/vol/vol_admin/docs                    8271-MB   7076-MB
1194-MB      86% /nas_mnt/docs
dev0ns951:/vol/vol_admin/prodhome               32870-MB  25964-MB
6906-MB      79% /home/users
dev0ns951:/vol/vol_admin/prodhome               32870-MB  25964-MB
6906-MB      79% /nas_mnt/prodhome
dev0ns951:/vol/vol_admin/saphome                   91-MB     37-MB
53-MB      42% /nas_mnt/saphome
fd                                                  0-MB      0-MB
0-MB       0% /dev/fd
mnttab                                              0-MB      0-MB
0-MB       0% /etc/mnttab
swap                                             8460-MB      0-MB
8459-MB       1% /var/run
swap                                             8513-MB     54-MB
8459-MB       1% /tmp

Attachment: mydf.sh
Description: Bourne shell script

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/

Reply via email to