Hi Rob,

I think it finds the bit starting with CK, if matches it stores in $sl($1)
and finally prints  the key value as.

keys %sl,

bec's all matches are same it strores only once. am i correct ? Pls correct
me if am wrong.

Many Thanks

Js

On 7/4/08, jet speed <[EMAIL PROTECTED]> wrote:
>
> Hi Rob,
>
> Great, Thanks it works. Perfect.
>
> I Will explore your recommendation for using seek File option. I will read
> some doc.
>
> In your code, Pls explain what this piece of code does.
>
> $sl{$1}++ if /\bID=(CK\w+)/i;
>
>
> Many Thanks
> Js
>
>
>
>
> On 7/4/08, Rob Dixon <[EMAIL PROTECTED]> wrote:
>>
>> jet speed wrote:
>> > Hi All,
>> >
>> > I put togather a piece of code with some help, to capture the output as
>> > below from a file "cxout1" as below. I am sure this can be written in
>> few
>> > lines or even differnt way of getting the same out put with use of hash
>> etc.
>> > Kindly help me to optimize the code. Any help would be much appericated.
>> >
>> > output from the script
>> > ---------------------------------
>> >
>> > The Clarion Array Serial Number is CK200061101100
>> >
>> > LUN INFO         POLICY-TYPE             OWNER           PSEUDO DEVICE
>> > LUN 415          policy=CLAROpt          current=SP
>> A            emcpower3a
>> > LUN 815          policy=CLAROpt          current=SP
>> B            emcpower4a
>> >
>> > file contents cxout1
>> >
>> > -----------------------------
>> >
>> > Pseudo name=emcpower3a
>> > CLARiiON ID=CK200061101100 [JAZZ]
>> > Logical device ID=600601601496160012288D48703EDB11 [LUN 415]
>> > state=alive; policy=CLAROpt; priority=0; queued-IOs=0
>> > Owner: default=SP A, current=SP A
>> >
>> ==============================================================================
>> > ---------------- Host ---------------   - Stor -   -- I/O Path -  --
>> Stats
>> > ---
>> > ### HW Path                 I/O Paths    Interf.   Mode    State  Q-IOs
>> > Errors
>> >
>> ==============================================================================
>> > 2310 [EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]       c3t20d0s0 
>> > SP A0     active  alive      0
>> > 1
>> > 2310 [EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]       c3t21d0s0 
>> > SP A1     active  alive      0
>> > 1
>> >
>> > Pseudo name=emcpower4a
>> > CLARiiON ID=CK200061101100 [JAZZ]
>> > Logical device ID=6006016014961600625987643E38DB11 [LUN 815]
>> > state=alive; policy=CLAROpt; priority=0; queued-IOs=0
>> > Owner: default=SP B, current=SP B
>> >
>> ==============================================================================
>> > ---------------- Host ---------------   - Stor -   -- I/O Path -  --
>> Stats
>> > ---
>> > ### HW Path                 I/O Paths    Interf.   Mode    State  Q-IOs
>> > Errors
>> >
>> ==============================================================================
>> > 2310 [EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]       c3t20d1s0 
>> > SP A0     active  alive      0
>> > 1
>> > 2310 [EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]       c3t21d1s0 
>> > SP A1     active  alive      0
>> > 1
>> >
>> >
>> >
>> > my code
>> >
>> > #!/usr/bin/perl -w
>> >
>> > use strict;
>> > use warnings;
>> > use List::MoreUtils qw(:all);
>> > no warnings qw /syntax/;
>> >
>> >
>> >
>> > #PRINT SERIAL NUMBER
>> >
>> > my @sl;
>> > my $filename;
>> > $filename = "cxout1" ;
>> > open (FILE, "<$filename") or die "Could not open $filename: $!";
>> > while (<FILE>) {
>> > next unless $_ =~ /CK/;
>> > $_ = ~ (/\b(ID)\=(\w+)\s+/i)  ;
>> > push(@sl,$2);
>> > }
>> >
>> >
>> > # PRINT UNIQUE SERIAL NUMBER
>> >
>> > my %seen = ();
>> > my @uniq = ();
>> > my $item;
>> > foreach $item (@sl) {
>> >     unless ($seen{$item}) {
>> >         # if we get here, we have not seen it before
>> >         $seen{$item} = 1;
>> >         push(@uniq, $item);
>> >     }
>> > }
>> >
>> >
>> > print "\nThe Clarion Array Serial Number is @uniq\n\n";
>> >
>> >
>> > # PRINT LUN INFORMATION
>> >
>> > my @luns;
>> > #my $filename;
>> > $filename = "cxout1" ;
>> > open (FILE, "< $filename" ) or die "Could not open $filename: $!";
>> > while (<FILE>) {
>> >  chomp;
>> > # next unless $_ =~ /LUN/;
>> > # $_ =~ /\[(LUN\s+\d+)\]/;
>> > next unless /\[(LUN\s+\d+)\]/;
>> >  push(@luns,$1);
>> >
>> > }
>> >
>> > # PRINT POLICY INFORMATION
>> >
>> > my @pol;
>> > #my $filename;
>> > $filename = "cxout1" ;
>> > open (FILE, "< $filename" ) or die "Could not open $filename: $!";
>> > while (<FILE>) {
>> >  chomp;
>> >  next unless $_ =~ /policy/;
>> >  $_ =  unpack ("x13 A14", $_);
>> >  push(@pol,$_);
>> > }
>> >
>> > # PRINT OWNER INFORMATION
>> >
>> > my @own;
>> > #my $filename;
>> > $filename = "cxout1" ;
>> > open (FILE, "< $filename" ) or die "Could not open $filename: $!";
>> > while (<FILE>) {
>> >  chomp;
>> > next unless $_ =~ (/\b(current)\=\w+/);
>> > $_ = unpack ("x21 A14",$_);
>> > push(@own, $_);
>> > }
>> >
>> > #PRINT PSEUDO INFORMATION
>> >
>> > my @pseudo;
>> > open (FILE, "< $filename" ) or die "Could not open $filename: $!";
>> > while (<FILE>) {
>> >  chomp;
>> > next unless $_ =~ (/\b(Pseudo)/);
>> > $_ = unpack ("x12 A18", $_);
>> > push (@pseudo, $_);
>> > }
>> >
>> > #CONSOLIDATE & PRINT
>> >
>> > my $result = each_array(@luns, @pol, @own, @pseudo);
>> >
>> > print "LUN INFO\t POLICY-TYPE\t\t OWNER\t\t PSEUDO DEVICE\t\t\n";
>> >
>> >
>> > while ( my ($a, $b, $c, $d) = $result->() )
>> > {
>> >
>> >     print "$a\t\t $b\t\t $c\t\t $d\t\t\n";
>> > }
>>
>> The main way to simplify your code is to extract all the data in a simgle
>> pass
>> of the file. Even if you want to make several passes it is better to write
>>
>> seek FILE, 0, 0;
>>
>> to start reading from the beginning again instead of reopening the file
>> for each
>> pass.
>>
>> My first attempt at your program gave me this.
>>
>> HTH,
>>
>> Rob
>>
>>
>>
>> use strict;
>> use warnings;
>>
>> use List::MoreUtils qw(:all);
>>
>> #PRINT SERIAL NUMBER
>>
>> my $filename = 'cxout1' ;
>>
>> my %sl;
>> my @luns;
>> my @pol;
>> my @own;
>> my @pseudo;
>>
>> open my $fh, '<', $filename or die "Could not open $filename: $!";
>>
>> while (<$fh>) {
>> $sl{$1}++ if /\bID=(CK\w+)/i;
>> push @luns, $1 if /\[(LUN\s+\d+)\]/;
>> push @pol, $1 if /\b(policy=\w+);/;
>> push @own, $1 if /\b(current=[\w+ ]+)/;
>> push @pseudo, $1 if /\bPseudo name=(\w+)/;
>> }
>>
>> # PRINT UNIQUE SERIAL NUMBER
>> #
>> my @uniq = keys %sl;
>> print "\nThe Clarion Array Serial Number is @uniq\n\n";
>>
>>
>> #CONSOLIDATE & PRINT
>> #
>> my $result = each_array(@luns, @pol, @own, @pseudo);
>>
>> print "LUN INFO\t POLICY-TYPE\t\t OWNER\t\t PSEUDO DEVICE\t\t\n";
>>
>> while ( my @row = $result->() ) {
>> printf "%s\t\t %s\t\t %s\t\t %s\t\t\n", @row;
>> }
>>
>
>

Reply via email to