PERL question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL question
# 8  
Old 10-04-2005
extending the filter

Hi,

Back again. If I wanted to say filter the columns that I need in the output as follows how would I do it. Please advise. Thanks.

Output required
Code:
  Length Size  Ratio  Name
  ------ ----  -----  ----
  1002KB 226KB 77.5%  M0511514944/file1
   474KB  91KB 80.8%  M0511514944/file2
   476KB  91KB 80.9%  M0511514944/file3
   113KB  92KB 18.5%  M0511514944/file4
  ------ ------ ----- ----
  2065KB 500KB 75.8%  4

Code I have so far doesnt seem to work.
Code:
#!/usr/bin/perl 

$out = `pkzipc test.zip`;
$start = 0;
$buf = '';
$Count = 0;
foreach $line (split /\n/, $out) {
	if ($line =~ /^\s*Length/) { $start = 1; }
	if ($start) {
($Fld1,$Fld2,$Fld3,$Fld4,$Fld5,$Fld6,$Fld7,$Fld8,$Fld9) = split(' ', $line, 9999);
if ($Fld1 =~ '------') { $Count = $Count + 1; }
                                           if ($Count =~ 2) {
                                                $Newline = printf ("%6s %5s %5s %-200s\n", $Fld1, $Fld2, $Fld3, $Fld4);
                                              }
                                           else {
                                                $Newline = printf ("%6s %5s %5s %-200s\n", $Fld1, $Fld3, $Fld4, $Fld9);
                                              }
		$buf .= ('COMMENT   ; ' . $Newline . "\n");
	}
}
open FILE, ">>file.txt" or die "cannot open file for writing";
print FILE $buf;
close FILE

The desired output is not obtained with the code above. Can someone tell me whats wrong. Thanks for your help.
Jerardfjay
# 9  
Old 10-05-2005
Quote:
Originally Posted by jerardfjay

Code:
if ($Fld1 =~ '------') { $Count = $Count + 1; }
                                           if ($Count =~ 2) {

Try $Count == 2 on the next line.
# 10  
Old 10-13-2005
Use of uninitialized value in pattern match (m//)

Hi,

Back again. I got the code to work. Thanks cbkihong.
Here is the current snippet of the code.

Code:
$out = `pkzipc $CurDir$WorkDir\.zip`;
$start = 0;
$buf = '';
$Count = 0;
open FILE, ">>$CurDir$WorkDir\.ctr" or print ("Cannot open file ${WorkDir}\.ctr for writing $! \n");
foreach $line (split /\n/, $out)
{
      $Newline = '';
      ($Fld1,$Fld2,$Fld3,$Fld4,$Fld5,$Fld6,$Fld7,$Fld8,$Fld9) = split(' ', $line, 9999);
      if ($Fld1 =~ /^\s*Length/) { $start = 1; }
      if ($start)
         {
            if ($Fld1 eq '------') {
               $Count = $Count + 1;
            }
            if ($Count eq 2) {
               $Newline=sprintf "%6s %6s %5s %5s", $Fld1 , $Fld2 , $Fld3 , $Fld4;
               }
               else {
                  $Newline=sprintf "%6s %6s %5s %-200s", $Fld1 , $Fld3 , $Fld4 , $Fld9;
                  }
            $buf .= ('COMMENT          ; ' . $Newline . "\n");
          }
       }
       print FILE $buf;
       close FILE;

Here is the partial output that I get of the .ctr file

Code:
COMMENT          ; Text from this message will appear in the control file as instructions to the re
COMMENT          ; Length   Size Ratio Name

COMMENT          ; ------   ---- ----- ----

COMMENT          ; 1002KB  226KB 77.5% DIR1/M0511514944.exp

COMMENT          ;  474KB   91KB 80.8% DIR2/47105SNAAA120-C1__LEVERASSYHANDBRAKE__LD521117.exp

COMMENT          ;  476KB   91KB 80.9% DIR2/47105SNAAA830-C1__LEVERASSYHANDBRAKE__LD521117.exp

COMMENT          ;  113KB   92KB 18.5% OTHER_FILES/44732S0K_A003____C4426278.exp

COMMENT          ; ------ ------ -----  ----
COMMENT          ; 2065KB  500KB 75.8%     4

However I do get the following messages during execution.

Code:
Use of uninitialized value in pattern match (m//) at test.pl line 415, <IN> line 2.
Use of uninitialized value in pattern match (m//) at test.pl line 415, <IN> line 2.

Line 415 happens to be

Code:
if ($Fld1 =~ /^\s*Length/) { $start = 1; }

Any ideas as to how to overcome this message. Thanks. Jerardfjay
# 11  
Old 10-13-2005
That means the line is empty. Confirm by print $line, is that line empty?

That is a warning. It is mostly harmless, but if you want to get rid of that, you can try to put

Code:
next unless (defined $Fld1);

before line 415, so that the iteration is skipped to check next line, after all the current one is empty.
# 12  
Old 10-14-2005
thanks cbkihong.

I understand this is only a warning message. However I would like to get a clean execution, without warnings.

meaning when the $fld1 has no values or is blank, then this messages is generated.

thanks again for your help.
jerardfjay
# 13  
Old 10-25-2005
truncate the value of $Fld9

Hello,

How do I trim/truncate the value of the field $Fld9 to lets say 10 characters wide. I need to only use the first left justified 10 characters. If there is more than 80 characters that are assigned to this field from the $line.

I have tried the following and it doesnt seem to make a difference.

Code:
$Newline=sprintf "%6s %6s %5s %.10s", $Fld1 , $Fld3 , $Fld4 , $Fld9;

instead of

Code:
$Newline=sprintf "%6s %6s %5s %-10s", $Fld1 , $Fld3 , $Fld4 , $Fld9;

However if the $Fld9 is being assigned a value more than 10 characters wide,
The sprintf statement does not seem to truncate the value while printing the line.

do I have to use another command for this or can is there an alternate formatting option that I can use to truncate field values while printing using sprintf in PERL.

Please advise. Thanks
Jerardfjay
# 14  
Old 10-25-2005
substr to the rescue

Hello,

I have used substr($Fld9, 0, 10) to get the values that I need and while printing I use %-10s to left justify the value being printed.

Thanks
Jerardfjay
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl question about

Hello everybody, I am new at the forum and a total newbie when it comes to Unix. I am trying to see how I can add the ability to kill a user's processes? I want to add this to my Shel Script Add the code/process into a subroutine. Also, I would like to use an array to store the list... (0 Replies)
Discussion started by: kinelisch
0 Replies

2. Shell Programming and Scripting

Perl Question

Hello all, I have the following line: xxx|xxxx|xxxx|xxx.xx|xxx And i insert the values in an array. I am trying to find out if the field of the array (where field=xxx.xx) has the '.' character. I am using the code below but it doesn't seem to work. if($field=~ /./) { ... (3 Replies)
Discussion started by: chriss_58
3 Replies

3. Shell Programming and Scripting

PERL Question ...

I am reading a file in perl script .. during the debug the $linein value is : linein : +ASM1,sys,||¬ |3Æqúoü;”ט|| from this line I am getting the tmepuser and password from above : ($tmpuser, $pwd) = ($linein =~ /^$server\s*,\s*(+)\s*,\|\|(.+)\|\|/sm); I am getting $tmpuser and... (2 Replies)
Discussion started by: talashil
2 Replies

4. Shell Programming and Scripting

another perl question

I have a question regarding bulding a hash from a file which has below pattern I thought I could write something like this but clearly my syntax is way off $/ = "\n\n"; $" = "\n"; open(FILE, file1) || die; my %keymaster = ( ); while (<FILE>) { my $topinfo =~... (5 Replies)
Discussion started by: hankooknara
5 Replies

5. Shell Programming and Scripting

another perl question

I fail to see how below answer is 1? can someone explain this for me? DB<3> $string = "The cat sat on the mat"; DB<4> $animal = ($string =~ m/The (.*) sat/); DB<5> print $animal; 1 (2 Replies)
Discussion started by: hankooknara
2 Replies

6. Shell Programming and Scripting

Perl question regarding [ ]

Below program, I do not get why item I am looking for is , instead of . When I do $#text, i get the right value for $value1, but when I do , i get somsething4, instead of somsethingxxxxxxxxxxxxxxxxxxx(which is what I am looking for. when I do , I get empty.. why? what did I do wrong? can you... (2 Replies)
Discussion started by: hankooknara
2 Replies

7. Shell Programming and Scripting

another perl question

I copy and paste from the book but this thing is not working. I cannot figure out what is wrong with myline 9.. can someone please tell me # cat ./sort4.pl #!/usr/bin/perl -w use strict; use warnings; my $input = shift; my $output = shift; open(IN, '<', $input) or die... (4 Replies)
Discussion started by: hankooknara
4 Replies

8. Shell Programming and Scripting

perl question

If I use 2 system commands in a script, will one finish before the next one starts? or will it start the first and the second at the same time? i.e. system("ps | grep rminer"); system("ls -al | grep 431"); (1 Reply)
Discussion started by: BG_JrAdmin
1 Replies

9. Shell Programming and Scripting

Perl: tk question

When i run my perl/tk script, a perl window pops up behind the GUI window,, can this be hidden???? Also, can the Icon be changed, the Tk icon in every window??? (1 Reply)
Discussion started by: perleo
1 Replies

10. Shell Programming and Scripting

Question about Perl

Where can i find solid information about programming in Perl? Thank you in advance!!!:) (5 Replies)
Discussion started by: SolidSnake
5 Replies
Login or Register to Ask a Question