Perl script help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl script help
# 1  
Old 01-23-2013
Perl script help

Hi

I'm pretty new to PERL so please bear with meSmilie

I have a df output which I need to add the used of each filesystem

Example:
Code:
anmtl004	/dev/hd4	320	37%	4253	8%	/	rootvg
anmtl004	/dev/fslv01	2048	10%	71	1%	/IBMperfpmr	rootvg
anmtl004	/dev/hd11admin	128	1%	5	1%	/admin	rootvg
anmtl004	/dev/fslv00	256	43%	371	2%	/appl/cyb_agent	rootvg
anmtl004	mtlhqnasa:/vol/nonprod01/trd/rec	943718	77%	18817636	60%	/appl/rec	
anmtl004	mtlhqnasa:/vol/nonprod01/trd/bwarchive	943718	77%	18817636	60%	/archive	
anmtl004	/dev/lvaudit	512	5%	368	1%	/audit	rootvg
anmtl004	mtlhqnasa:/vol/nonprod01/cn_dev	943718	77%	18817636	60%	/cn_dev	
anmtl004	/dev/lvSAPdb2	1024	1%	15	1%	/db2	vgSAP
anmtl004	mtlhqnasa.cn.ca:/vol/fixes	209141	83%	51782	1%	/fixes	
anmtl004	/dev/hd1	512	5%	1403	2%	/home	rootvg
anmtl004	/dev/lvlogs	256	12%	194	1%	/logs	rootvg
anmtl004	/dev/hd10opt	256	66%	3201	14%	/opt	rootvg
anmtl004	/proc	-	-	-	-	/proc	
anmtl004	mtlhqnasa:/vol/nonprod00/sapmnt_bd3	943718	74%	4928053	16%	/sapmnt/BD3	
anmtl004	mtlhqnasa:/vol/nonprod00/trd/sapmnt_bx2	943718	74%	4928053	16%	/sapmnt/BX2	
anmtl004	mtlhqnasa:/vol/nonprod00/trd/sapmnt_ed1	943718	74%	4928053	16%	/sapmnt/ED1	
anmtl004	mtlhqnasa:/vol/nonprod00/trd/sapmnt_ex1	943718	74%	4928053	16%	/sapmnt/EX1	
anmtl004	mtlhqnasa:/vol/nonprod00/trd/sapmnt_wx1	943718	74%	4928053	16%	/sapmnt/WX1	
anmtl004	/dev/hd3	2048	1%	227	1%	/tmp	rootvg
anmtl004	/dev/hd2	4416	80%	47078	16%	/usr	rootvg
anmtl004	/dev/lvSAPusr	5120	4%	215	1%	/usr/sap	vgSAP
anmtl004	/dev/lvSAPDBD3usr	128	1%	21	1%	/usr/sap/BD3	vgSAPD
anmtl004	/dev/lvSAPDBD3ascs	1024	13%	109	1%	/usr/sap/BD3/ASCS08	vgSAPD
anmtl004	/dev/lvSAPDBD3aers	1024	24%	125	1%	/usr/sap/BD3/ERS09	vgSAPD
anmtl004	/dev/lvSAPDBD3wd	3072	7%	557	1%	/usr/sap/BD3/W07	vgSAPD
anmtl004	/dev/lvSAPDBX2usr	128	1%	22	1%	/usr/sap/BX2	vgSAPX
anmtl004	/dev/lvSAPDBX2ascs	1024	7%	67	1%	/usr/sap/BX2/ASCS13	vgSAPX
anmtl004	/dev/lvSAPDBX2aers	1024	21%	91	1%	/usr/sap/BX2/ERS14	vgSAPX
anmtl004	/dev/lvSAPDBX2wd	3072	10%	378	1%	/usr/sap/BX2/W12	vgSAPX
anmtl004	/dev/lvSAPDAD	5120	16%	3480	1%	/usr/sap/DAD	vgSAP
anmtl004	/dev/lvSAPXED1usr	128	1%	19	1%	/usr/sap/ED1	vgSAPD
anmtl004	/dev/lvSAPXED1ers	1024	19%	79	1%	/usr/sap/ED1/ERS04	vgSAPD
anmtl004	/dev/lvSAPXED1scs	1024	44%	178	1%	/usr/sap/ED1/SCS03	vgSAPD
anmtl004	/dev/lvSAPXED1wd	1024	32%	392	1%	/usr/sap/ED1/W02	vgSAPD
anmtl004	/dev/lvSAPXEX1usr	128	1%	19	1%	/usr/sap/EX1	vgSAPX
anmtl004	/dev/lvSAPXEX1ers	1024	14%	76	1%	/usr/sap/EX1/ERS19	vgSAPX
anmtl004	/dev/lvSAPXEX1scs	1024	35%	177	1%	/usr/sap/EX1/SCS18	vgSAPX
anmtl004	/dev/lvSAPXEX1wd	1024	32%	406	1%	/usr/sap/EX1/W17	vgSAPX
anmtl004	/dev/lvSAPXWX1usr	128	1%	19	1%	/usr/sap/WX1	vgSAPX
anmtl004	/dev/lvSAPXWX1ers	1024	20%	42	1%	/usr/sap/WX1/ERS81	vgSAPX
anmtl004	/dev/lvSAPXWX1scs	1024	61%	194	1%	/usr/sap/WX1/SCS80	vgSAPX
anmtl004	/dev/lvSAPXWX1wd	1024	31%	380	1%	/usr/sap/WX1/W79	vgSAPX
anmtl004	mtlhqnasa:/vol/nonprod02/nasd_hostagent_depot	943718	18%	643102	3%	/usr/sap/hostagent_depot	
anmtl004	mtlhqnasa:/vol/prod00/saptrans_bw	322560	86%	2384871	9%	/usr/sap/transBW	
anmtl004	mtlhqnasa:/vol/prod00/saptrans_bwj	322560	86%	2384871	9%	/usr/sap/transBWJ	
anmtl004	/dev/hd9var	896	49%	1727	2%	/var	rootvg
anmtl004	/dev/livedump	256	1%	4	1%	/var/adm/ras/livedump	rootvg

This is what I have

Code:
#Build a lookup table
open (F,"report_df.csv") || die ("File could not be open");     #Read file in
while ( <F> ) {                                                 #for every line do

        my @line = split (",");                                 #Put each line in an array and split it at every ","
        my $host = $line[0];                                    #Every field needed is assigned a variable
        my $filesystem = $line[1];
        my $alloc_mb = $line[2];
        my $pct_used = $line[3];
        my $vg = $line[7];

$fs{$host}{$vg}{$filesystem}{"ALLOC_MB"} = $alloc_mb;           #Build the hash
$fs{$host}{$vg}{$filesystem}{"PCT_USED"} = $pct_used;
}
close F;
my @list_of_hosts = (sort keys %fs);                                    #Build an array of every host

foreach my $host (@list_of_hosts) {
        my @list_of_vg = (keys %{$fs{$host}});

        foreach my $vg (@list_of_vg) {
        my @list_of_fs = (keys %{$fs{$host}{$vg}});

                foreach my $filesystem (@list_of_fs) {
                my $alloc_mb = $fs{$host}{$vg}{$filesystem}{"ALLOC_MB"};
                my $pct_used = $fs{$host}{$vg}{$filesystem}{"PCT_USED"};
                my $free_space = (100 - $pct_used) * $alloc_mb;


                               print "$host, $filesystem, $vg\n";
}
}
}

So I need to add them now..

Thanks
# 2  
Old 01-23-2013
Can you show the output you want?
# 3  
Old 01-23-2013
Hi

Sure
Code:
anmtl004	rootvg {TOTALSUM}

---------- Post updated at 09:36 AM ---------- Previous update was at 09:36 AM ----------

and so on for all VGs
# 4  
Old 01-23-2013
I meant representative output. That output's not even enough for me to properly guess what you want a total of. Neither is a broken program that doesn't do what you want...

So, a wild guess:

Code:
# Total in MB would be sum third column times fourth column divided by 100.
awk '{ sub(/%/, "", $4); A[$1] += ($3 * $4)/100; } END { for(X in A) printf("%s, %d MB USED\n", X, A[X]) }' report_df.csv

which would print
Code:
anmtl004, 6579862 MB USED


Last edited by Corona688; 01-23-2013 at 11:33 AM..
# 5  
Old 01-23-2013
Thanks for the code however I need it in perl.

And the output would have to add the MB used of all the filesystems in the particular VG (ex:rootvg) and then have a report reporting on

Code:
HOST VG TOTAL

I got as far as getting the total used of each filesystems
with this
Code:
my $free_space = (100 - $pct_used) * $alloc_mb;

Thanks

Last edited by Scott; 01-24-2013 at 03:58 PM.. Reason: Code tags
# 6  
Old 01-23-2013
Quote:
Originally Posted by bombcan
Thanks for the code however I need it in perl.
Even though it did in a simple one-line program what yours couldn't do in over 30? all right...
Quote:
And the output would have to add the MB used of all the filesystems in the particular VG (ex:rootvg) and then have a report reporting on

HOST VG TOTAL

I got as far as getting the total used of each filesystems
with this
my $free_space = (100 - $pct_used) * $alloc_mb;

Thanks
Think I see, now. Here is the awk version:

Code:
$ awk '{ sub(/%/, "", $4); A[$7] += ($3 * (100-$4))/100; } END { for(X in A) printf("%s, %d MB USED\n", X, A[X]) }' datafile

/usr/sap/transBWJ, 45158 MB USED
/usr/sap/ED1, 126 MB USED
/logs, 225 MB USED
/fixes, 35553 MB USED
/usr/sap/BX2/ASCS13, 952 MB USED
/usr/sap/EX1/ERS19, 880 MB USED
/usr/sap/hostagent_depot, 773848 MB USED
/var/adm/ras/livedump, 253 MB USED
/usr/sap/BD3/ASCS08, 890 MB USED
/tmp, 2027 MB USED
/usr/sap/EX1/W17, 696 MB USED
/usr/sap/WX1/ERS81, 819 MB USED
/proc, 0 MB USED
/var, 456 MB USED
/usr/sap/ED1/ERS04, 829 MB USED
/db2, 1013 MB USED
/sapmnt/BD3, 245366 MB USED
/archive, 217055 MB USED
/usr/sap/BD3/ERS09, 778 MB USED
/usr/sap/DAD, 4300 MB USED
/sapmnt/WX1, 245366 MB USED
/usr/sap/BD3, 126 MB USED
/, 201 MB USED
/sapmnt/EX1, 245366 MB USED
/cn_dev, 217055 MB USED
/IBMperfpmr, 1843 MB USED
/appl/rec, 217055 MB USED
/usr/sap/WX1, 126 MB USED
/usr, 883 MB USED
/usr/sap/EX1, 126 MB USED
/audit, 486 MB USED
/usr/sap, 4915 MB USED
/home, 486 MB USED
/usr/sap/BX2/ERS14, 808 MB USED
/opt, 87 MB USED
/admin, 126 MB USED
/usr/sap/EX1/SCS18, 665 MB USED
/usr/sap/WX1/W79, 706 MB USED
/appl/cyb_agent, 145 MB USED
/usr/sap/transBW, 45158 MB USED
/usr/sap/WX1/SCS80, 399 MB USED
/sapmnt/BX2, 245366 MB USED
/usr/sap/ED1/SCS03, 573 MB USED
/usr/sap/BX2/W12, 2764 MB USED
/usr/sap/BD3/W07, 2856 MB USED
/usr/sap/BX2, 126 MB USED
/sapmnt/ED1, 245366 MB USED
/usr/sap/ED1/W02, 696 MB USED

$

I'll get to work on converting that into perl...
# 7  
Old 01-23-2013
Ok thanks but it still does not add the filesystems in the VG. This is doing each filesystem.
The ones that don't have a VG at the end you can skip.

So just to resume
Code:
anmtl004	/dev/lvSAPusr	5120	4%	215	1%	/usr/sap	vgSAP

This would look like
anmtl004 vgSAP 4.79GB

Thanks again for your efforts and time!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Shell Programming and Scripting

Excuting perl script from within a perl script with variables.

Not sure what I am doing wrong here, but I can print the list with no issue. Just a blank screen with the 'do'. #!/usr/bin/perl open FILE, "upslist.txt"; while ($line=<FILE>){ if ($line=~/^(.*?),(.*?)$/){ #print "ups:$1 string:$2\n"; do 'check_snmp_mgeups-0.1.pl -H $1 -C $2'; } ... (1 Reply)
Discussion started by: mrlayance
1 Replies

3. Shell Programming and Scripting

Perl : embedding java script with cgi perl script

Hi All, I am aware that html tags can be embedded in cgi script as below.. In the same way is it possible to embed the below javascript in perl cgi script ?? print("<form action="action.htm" method="post" onSubmit="return submitForm(this.Submitbutton)">"); print("<input type = "text"... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. Shell Programming and Scripting

executing perl script from another perl script : NOT WORKING

Hi Folks, I have 2 perl scripts and I need to execute 2nd perl script from the 1st perl script in WINDOWS. In the 1st perl script that I had, I am calling the 2nd script main.pl =========== print "This is my main script\n"; `perl C:\\Users\\sripathg\\Desktop\\scripts\\hi.pl`; ... (3 Replies)
Discussion started by: giridhar276
3 Replies

5. Shell Programming and Scripting

calling a perl script with arguments from a parent perl script

I am trying to run a perl script which needs input arguments from a parent perl script, but doesn't seem to work. Appreciate your help in this regard. From parent.pl $input1=123; $input2=abc; I tried calling it with system("/usr/bin/perl child.pl $input1 $input2"); and `perl... (1 Reply)
Discussion started by: grajp002
1 Replies

6. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

7. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

8. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

9. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies

10. Shell Programming and Scripting

Perl: Run perl script in the current process

I have a question regarding running perl in the current process. I shall demonstrate with an example. Look at this. sh-2.05b$ pwd /tmp sh-2.05b$ cat test.sh #! /bin/sh cd /etc sh-2.05b$ ./test.sh sh-2.05b$ pwd /tmp sh-2.05b$ . ./test.sh sh-2.05b$ pwd /etc sh-2.05b$ So... (10 Replies)
Discussion started by: vino
10 Replies
Login or Register to Ask a Question