PERL question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL question
# 1  
Old 09-27-2005
PERL question

Hello,

pkzipc of a certain zip file yeilds the following in shell

Code:
PKZIP(R)  Version 6.0  FAST!  Compression Utility for AIX
Copyright 1989-2002 PKWARE Inc.  All Rights Reserved. Registered Version
PKZIP Reg. U.S. Pat. and Tm. Off.  Patent No. 5,051,745

Viewing .ZIP: test.zip

  Length Method     Size  Ratio    Date     Time   CRC-32  Mode   Name
  ------ ------     ----  -----    ----     ----   ------  ----   ----
  1002KB DeflatN    226KB 77.5% 09/26/2005  3:16p a7f6d4e9 0777   M0511514944/file1
   474KB DeflatN     91KB 80.8% 09/26/2005  3:16p fbc1c376 0777   M0511514944/file2
   476KB DeflatN     91KB 80.9% 09/26/2005  3:16p 9fac9cf5 0777   M0511514944/file3
   113KB DeflatN     92KB 18.5% 09/26/2005  3:16p 5b5b5521 0777   M0511514944/file4
  ------           ------ -----                                   ----
  2065KB            500KB 75.8%                                      4

In perl I want to be able to do the following.

issue the following shell command.

Code:
pkipc test.zip

which would result in something like

Code:
PKZIP(R)  Version 6.0  FAST!  Compression Utility for AIX
Copyright 1989-2002 PKWARE Inc.  All Rights Reserved. Registered Version
PKZIP Reg. U.S. Pat. and Tm. Off.  Patent No. 5,051,745

Viewing .ZIP: test.zip

  Length Method     Size  Ratio    Date     Time   CRC-32  Mode   Name
  ------ ------     ----  -----    ----     ----   ------  ----   ----
  1002KB DeflatN    226KB 77.5% 09/26/2005  3:16p a7f6d4e9 0777   M0511514944/file1
   474KB DeflatN     91KB 80.8% 09/26/2005  3:16p fbc1c376 0777   M0511514944/file2
   476KB DeflatN     91KB 80.9% 09/26/2005  3:16p 9fac9cf5 0777   M0511514944/file3
   113KB DeflatN     92KB 18.5% 09/26/2005  3:16p 5b5b5521 0777   M0511514944/file4
  ------           ------ -----                                   ----
  2065KB            500KB 75.8%                                      4

I need the take only the columns and values output by the pkzip command and add the constant "COMMENT ;" in front of it to make the following

Code:
COMMENT       ;  Length Method     Size  Ratio    Date     Time   CRC-32  Mode   Name
COMMENT       ;  ------ ------     ----  -----    ----     ----   ------  ----   ----
COMMENT       ;  1002KB DeflatN    226KB 77.5% 09/26/2005  3:16p a7f6d4e9 0777   M0511514944/file1
COMMENT       ;   474KB DeflatN     91KB 80.8% 09/26/2005  3:16p fbc1c376 0777   M0511514944/file2
COMMENT       ;   476KB DeflatN     91KB 80.9% 09/26/2005  3:16p 9fac9cf5 0777   M0511514944/file3
COMMENT       ;   113KB DeflatN     92KB 18.5% 09/26/2005  3:16p 5b5b5521 0777   M0511514944/file4
COMMENT       ;  ------           ------ -----                                   ----
COMMENT       ;  2065KB            500KB 75.8%                                      4

Finally I need the above appended to an existing log file.
Please advise me on how to achieve this using PERL. Thanks for your help.

Jerardfjay
# 2  
Old 09-27-2005
Code:
pkipc test.zip |awk '"Length"==$1,0{print "COMMENT  ; " $0}' >>logfile

# 3  
Old 09-27-2005
In Perl, something along the lines of

Code:
#!/usr/bin/perl 

$out = `pkzipc test.zip`;
$start = 0;
$buf = '';
foreach $line (split /\n/, $out) {
	if ($line =~ /^\s*Length/) { $start = 1; }
	if ($start) {
		$buf .= ('COMMENT   ; ' . $line . "\n");
	}
}
open FILE, ">>file.txt" or die "cannot open file for writing";
print FILE $buf;
close FILE;

# 4  
Old 09-28-2005
Thanks cbkihong,

Its exactly what I was looking for. Although I understand the piece where you concatenate the string "COMMENT ;" to the existing lines after filtering unwanted lines, what is the logic that you are using to filter the lines that start with PKZIP,Copyright and Viewing?

The other question that I have is that how can I use a variable that holds the name of the logfile instead of hardcoding the line

Code:
open FILE, ">>file.txt" or die "cannot open file for writing";

Thanks for your help.
Jerardfjay

Last edited by jerardfjay; 09-28-2005 at 09:19 AM.. Reason: claifying the question
# 5  
Old 09-28-2005
Quote:
Originally Posted by jerardfjay
The other question that I have is that how can I use a variable that holds the name of the logfile instead of hardcoding the line

Code:
open FILE, ">>file.txt" or die "cannot open file for writing";

Jerardfjay
Just using the variable $LogFile that holds ths name of the logfile seems to do the trcik. Thanks.
# 6  
Old 09-28-2005
Quote:
Originally Posted by jerardfjay
Its exactly what I was looking for. Although I understand the piece where you concatenate the string "COMMENT ;" to the existing lines after filtering unwanted lines, what is the logic that you are using to filter the lines that start with PKZIP,Copyright and Viewing?
There's no trick. Just find the line that contains "Length" and process those thereafter, so a sed run will do the same trick.

But a warning though. The routine will not notice if the command fails for whatever reason. Maybe you will want to check $? (if pkzipc obeys so) for return value, e.g.

Code:
$out = `pkzipc test.zip`;
if ($? >> 8) {
    # error (assume non-zero return status is error)
}

As a sidenote, did you try the Archive::Zip module (of course you will need to download and install it)? It seems to let you retrieve such information programmatically:

http://search.cpan.org/~smpeters/Arc...mple_accessors
# 7  
Old 09-30-2005
Quote:
Originally Posted by cbkihong
There's no trick. Just find the line that contains "Length" and process those thereafter, so a sed run will do the same trick.
Thanks cbikong. I was actually referring to my question of trying to use the variable name instead of the hardcode log file name in the line of code


Code:
open FILE, ">>file.txt" or die "cannot open file for writing";

Thanks for the Archive::Zip module for perl compression-decompression. However, like I have mentioned before, I would have to create my own perl environment in order to get this installed and have it working.
Moreover, there is logic in the original program to perform a pkzipc only when the contents of the zip file is greater than zero.

Thanks for your help.
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