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
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/