Count script wrapper help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Count script wrapper help
# 15  
Old 05-01-2009
Quote:
Originally Posted by richsark
OK, I follow you, so what do you recommend?
One way could be to install a Perl module like IO::CaptureOutput (or others) to explicitly capture stderr as mentioned in the following webpage:

Run external process from Perl, capture stderr, stdout AND the process exit code - Stack Overflow

I haven't worked with any of the modules mentioned therein, and my current setup does not allow me to install them. I can try them later on in my personal laptop later on.

In the meantime, maybe a forum member could come up with yet another suggestion.

HTH,
tyler_durden
# 16  
Old 05-01-2009
HI

You think thats the issue?
# 17  
Old 05-01-2009
Quote:
Originally Posted by richsark
HI

You think thats the issue?
Yes, check this:

Code:
$
$ # the following command executes successfully
$
$ ls -1 *.jpg
file1.jpg
file2.jpg
$
$ # now when I use back-ticks to run the command,
$ # @x gets assigned the output, or "stdout" of this command
$
$ perl -e '{ @x = `ls -1 *.jpg`; }'
$
$ # it didn't print anything because I did not add the "print"
$ # command explicitly; if I do, then:
$
$ perl -e '{ @x = `ls -1 *.jpg`; print @x; }'
file1.jpg
file2.jpg
$
$ # it prints properly
$
$ # Now this command does not execute successfully
$
$ ls -1 *.bmp
ls: cannot access *.bmp: No such file or directory
$
$ # The message that you see is standard error, or "stderr"
$ # It does not get assigned to @x, as you can see below
$
$ perl -e '{ @x = `ls -1 *.bmp`; }'
ls: cannot access *.bmp: No such file or directory
$
$ # I did not add the "print" command explicitly, still I see
$ # the output - that's because it is the "stderr" thrown by
$ # the command itself. It never got assigned to @x, as the
$ # following one-liner shows.
$
$ perl -e '{ @x = `ls -1 *.bmp`; print "Value of @x => ",@x; }'
ls: cannot access *.bmp: No such file or directory
Value of  => $
$
$

So, essentially you'll have to capture the standard output (stdout) as well as the standard error (stderr) in your perl program. The "back-tick" method can capture stdout, but cannot capture stderr. That's why you'd need those additional modules mentioned in the link above.

Once you've captured both, you'd check stdout for success and stderr for failure, and proceed from there.

HTH,
tyler_durden
# 18  
Old 05-05-2009
Hi,

I got it worked out with the help of many kind folks.

If your interested, I can post the final code?

Thanks
# 19  
Old 05-05-2009
Quote:
Originally Posted by richsark
Hi,

I got it worked out with the help of many kind folks.

If your interested, I can post the final code?
Sure, go ahead.

tyler_durden
# 20  
Old 05-05-2009
Here it is.

I want to thank Durden, FishMonger, Adam and ozo

Code:
#!perl
use strict; 
use warnings; 
use Data::Dumper; 
 
open my $log, '>', 'log-external.txt' or die "Could not open log: $!"; 
print $log "Subnet,Static,DHCP,Unused\n"; 
 
open my $dump, '>', 'dump.log' or die "failed to open 'dump.log' $!"; 
 
##### Step 1, read subnets 
open my $in, '<', 'm-names.txt' or die "Could not open m-names.txt: $!\n"; 
while( my $subnet = <$in>) { 
 
    print "Checking $subnet"; 
    chomp $subnet; 
     
    my %counts = (  
                   Static => 0, 
                   DHCP   => 0, 
                   Unused => 0, 
    ); 
     
    my @dnsoptions = `./getobjectlst.exe -u xx -p xx -o rich -a $subnet 2>&1`;
 
    print $dump "dumping \@dnsoptions\n";     
    print $dump Data::Dumper->Dump(\@dnsoptions); 
    print $dump '=' x 25, "\n"; 
 
    if ( @dnsoptions and $dnsoptions[0] eq '' ) {
        print "dnsoptions is null or undefined, going on to the next subnet\n"; 
        next; 
    } 
 
    # Now, at this point, we may have "Error 48" in @dnsoptions, or we may have 
    # the nicely formatted output. We'll have to check for both cases here. 
    # Let's check the unsuccessful case first. The condition below checks if 
    # the first element of @dnsoptions array has the following text in it - 
    # "Error 48: This subnet does not exist." in it. 
 
 
    if (join("",@dnsoptions) =~ /Error 48: This subnet does not exist./) { 
 
        # call "getsubnetlst.exe", passing $subnet as one of the parameters 
        my @subnetpart2 = `./getsubnetlst.exe -u xx-p xx -o rich -a $subnet -t network`; 
 
        print $dump "dumping \@subnetpart2\n";     
        print $dump Data::Dumper->Dump(\@subnetpart2); 
        print $dump '=' x 25, "\n"; 
 
         
        # now loop through each element of the array @subnetpart2, which looks like this - 
        # ########################################################################## 
        # "East" "146.149.1.0" "N" "" "146.149.0.0" " " " " "255.255.255.128" 
        # ########################################################################## 
        # pick up the 2nd field from the left (e.g. 146.149.1.0 above), and pass it as 
        # a parameter to the cli "getobjectlst.exe". 
 
 
        foreach my $line ( @subnetpart2 ) { 
 
            # get the 2nd field from the left 
            my $snetpart2 = (split/"\s+"/, $line)[1];
             if( $snetpart2 =~ /"/ ){
             warn "\$snetpart2 was $snetpart2\n when \$line was $line";
             next;  
} 
            # and now pass it to "getobjectlst.exe"; 
            my @dnsoptions2 = `./getobjectlst.exe -u xx -p xx -o rich -a $snetpart2`;
 
            print $dump "dumping \@dnsoptions2\n";     
            print $dump Data::Dumper->Dump(\@dnsoptions2); 
            print $dump '=' x 25, "\n"; 
             
            # find out counts of each subnettype (4th field from left) 
            foreach my $line (@dnsoptions2) { 
                my @subnettype = split/"\s+"/, $line; 
                $counts{$subnettype[3]}++; 
            } 
        } 
    } 
    else { # successful output from getobjectlst.exe 
 
        # find out counts of each subnettype (4th field from left) 
        foreach my $line (@dnsoptions) { 
            my @subnettype = split/"\s+"/, $line;
            $counts{$subnettype[3]}++; 
        } 
    } 
    printf $log "%s,%d,%d,%d\n", $subnet, $counts{Static}, $counts{DHCP}, $counts{Unused}; 
} 
 
close($in); 
close($log);

Only thing I like to solve is the output format,

I would like the output from the log-external.txt
from this:

Subnet,Static,DHCP,Unused
10.0.0.0/8
,37,0,217
146.149.0.0/16



To this:


Subnet,Static,DHCP,Unused

10.0.0.0/8,37,0,217
146.149.0.0/16,174,0,39314
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help needed on wrapper script

Hi Gurus, I need to build a wrapper script which will be passing the loading date and the data file name (provides option to the user to load a single data file or load all the data files) to the actual loader data_load.ksh to load in the database. 1. I want to execute the loader script... (6 Replies)
Discussion started by: express14
6 Replies

2. Shell Programming and Scripting

problem with the my wrapper script

Hi friends, i am working in ksh88. i am running the follwing wapper script in background to run two jobs parallely((eg nohup wrapper.ksh &):: wrapper.ksh ######################## #!/bin/ksh nohup ./pii_insert.ksh /nsing83/p2/test & nohup ./pii_update.ksh... (1 Reply)
Discussion started by: neelmani
1 Replies

3. Shell Programming and Scripting

Wrapper script Oracle look KSH

I have a KSH script that I want to call in a loop for each row in the above table --- new_script.ksh (psuedo code) the contents on this new script would be something like below... for t in (select table_name,schema_name from laod_table) loop /bin/load_table.ksh t.table_name... (4 Replies)
Discussion started by: vr23
4 Replies

4. UNIX for Advanced & Expert Users

Pass parameter to the main script from wrapper script

Hi, I am writing a wrapper script(wrap_script.sh) to one of the main scripts (main_script.sh) The main script is executed as following: ./main_script.sh <LIST> <STARTDATE> <ENDDATE> looks for a parameter which is a LIST(consists of different list names that need to be processed), START/END... (0 Replies)
Discussion started by: stunnerz_84
0 Replies

5. Shell Programming and Scripting

Wrapper Script Help With Perl Scripts

I have tried looking through wrapper scripts throughout the forum, but I don't think they were able to answer my question (either that or I'm just confused). Basically, I have a Perl script that I want to run in parallel 4 times with parameters, wait for all of them to finish, then run another... (8 Replies)
Discussion started by: kooshi
8 Replies

6. Shell Programming and Scripting

wrapper script in perl

Hi, I am in need of way to facilitate this senerio in a perl script. I have CLI ( command line interface) which I run like so: kip-tepltist -u Xxx -p Xxx Which produces tones of names from each template it found: 194Iselin-NJ 33-IDFLB-North-611-Woodward-8600 ... (5 Replies)
Discussion started by: richsark
5 Replies

7. Shell Programming and Scripting

Help with a wrapper script not working

Hello, I have the below wrapper script: #!/usr/bin/perl -w if ($^O eq 'MSWin32' ) { $subnet = 'c:\path\to\subnet.txt'; } else { $subnet = '/opt/qip/wrapper-del-sub'; } open FH1, 'jj-deleted-subnets.txt' or die "Can't open 'jj-deleted-subnets.txt' ... (0 Replies)
Discussion started by: richsark
0 Replies

8. Shell Programming and Scripting

Korn Shell Wrapper script

Hi Guys, I am trying write a wrapper script but I don't have any idea. I have 4 different korn shell scripts and all of them needs some parameters from command line (positional parameter). My script cant be interactive because its supposed to be automated. I am confused how can I write a wrapper... (6 Replies)
Discussion started by: pareshan
6 Replies

9. UNIX for Dummies Questions & Answers

What is a wrapper script

I tried searching the forum ,,but couldn't locate ..Can anyone give me a link or some information about wrapper script. (1 Reply)
Discussion started by: thana
1 Replies

10. UNIX for Dummies Questions & Answers

What is wrapper script and how to write

hi guys, I have a requirement to run a script 4 times with different parameter values. the 4 jobs have to run parallely which actually access different data of same table and deletes. how can i achieve this.................? Thanks in advance (1 Reply)
Discussion started by: chiru
1 Replies
Login or Register to Ask a Question