Hi Rob, Great, Thanks for sorting this out, Much appericiated.
Cheers Js On 7/4/08, Rob Dixon <[EMAIL PROTECTED]> wrote: > > jet speed wrote: > > > > 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; > > jet speed wrote: > > > > 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. > > (Please bottom-post your replies to this group (add them after the previous > posts that you quote) so that long threads can remain comprehensible. Thank > you.) > > Yes that's pretty much it. It checks the current line in the file to see if > there's a part that matches /ID=CK\w+/, and if so it uses the CK\w+ part to > increment the value of the hash element with that key. If there is no such > element already then one will be created. After the loop, the value of each > hash > element is the total number of times that key was seen: it's not used at > all but > could be useful for debugging. > > HTH, > > Rob > 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; } >