Boga Srinivas <[EMAIL PROTECTED]> wrote:    oryann9 wrote:
> I am trying to get the equivalent in KSH to work in Perl and I cannot seem to 
> get the same output. I need from /etc/passwd name, uid, gid and gecos for 
> each passwd files.
> 
> IN KSH:
> 
> for i in `ls /var/tmp/passwd.*`
> do
> print $i;
> print "\n";
> awk 'FS=":" {print $1,"\t",$3,"\t",$4,"\t",$5}' $i;
> print "\n";
> done
>
> IN PERL
> 
> use strict;
> use warnings;
> 
> my @array = glob("/var/tmp/passwd.*");
> my ($file,@name,@uid,@gid,@cmts);
> foreach $file (@array) {
> { local $/ = undef;
> open (FILE, "+<$file") or die $!;
> (@name,@uid,@gid,@cmts) = (split /:/, ) [0,2,3,4],"\n";
> print ("@name\n");
> print ("@uid\n");
> print ("@gid\n");
> print ("@cmts\n");
> }
> }
> 
> Perl Output:
> root 0 3
> root 0 3 NS2 Root
> root 0 3 tpgdrpp1 Root
> ...
> 
> 
> Desired and KSH output :
> 
> /var/tmp/passwd.admbakp1.hpux
> 
> root 0 3
> daemon 1 5
> bin 2 2
> sys 3 3
> adm 4 4
> uucp 5 3
> lp 9 7
> nuucp 11 11
> hpdb 27 1 ALLBASE
>
> 
Try this,

#!/usr/bin/perl

open( PASSWD, "/etc/passwd" );

while(
)
{
chomp;
@arr = split (/:/);
@[EMAIL PROTECTED],2,3,4];
print "\n @res";
}


-- 

Boga Srinivas
System Engineer


  cool, thanks!
  I modified it so it will work on multiple files.

  use strict;
use warnings;
   
  my @glob = glob("/cygdrive/c/temp/passwd.*");
my (@arr,@res,$file) = ();
  foreach $file (@glob) {
    open (FILE, "+<$file") or die "file: '$file' did not open $!";
    { local $/ = undef;
     my $contents = <FILE>;
     chomp $contents;
     @arr = split (/:/, $contents);
     @[EMAIL PROTECTED],2,3,4];
     print "\n @res";
    }
}
print "\n";
close (FILE);


derek
 __________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to