Here's one for you. I am hoping someone can criticize this or suggest some better way 
of writing parts of this code.

Regards

I.S


 #!/usr/bin/perl -w
use strict;
my $pass1 = "./passwd";
my $pass2 = "./passwd.old";

open PASS1 , "< $pass1" or die "Error opening $pass1: $!\n";;
open PASS2 , "< $pass2" or die "Error opening $pass2: $!\n";;

my %passfile1;
my %passfile2;
while (<PASS1>) {
     chomp;
   my @passline1 = split(":",$_);
     # read file into a hash
   my $ids = $passline1[0];
   $passfile1{$ids} = \@passline1;

   }
while (<PASS2>) {
#same as above
   chomp;
   my @passline2 = split(":",$_);
    # read file into a hash
   my $ids = $passline2[0];
   $passfile2{$ids} = \@passline2;
}
foreach my $ids (keys %passfile1) {
        
        my @l1 = @{$passfile1{$ids}};

        if (exists $passfile2{$ids}) {

                my @l2 = @{$passfile2{$ids}};

                my $compare = compare_arrays(\@l1,\@l2);
                if ($compare == 1) {
                
                
            my $line = join ':', @l1;
                
            print  "$line\n";
            next; }
        
                 #lines from second file
                 my $line = join ':', @l2;
                 print  "$line\n";
        
        }
                 #lines from first file
        my $line = join ':', @l1;
        print  "$line\n";
    }
 
foreach my $ids (keys %passfile2) {
        my @l1 = @{$passfile2{$ids}};
            if (!exists $passfile1{$ids}) {
                 my $line = join ':', @l1;
                 print  "$line\n";
                 }
       }            
            



sub compare_arrays {
        my ($first, $second) = @_;
        local $^W = 0;   
          return 0 unless @$first == @$second;
          for (my $i = 0; $i < @$first; $i++) {
            return 0 if $first->[$i] ne $second->[$i];
       }
       return 1;
    } 

_END_

John_Kennedy <[EMAIL PROTECTED]> wrote:

>Hello all,
>I am trying to write a script that will combine 2 /etc/passwd files.
>The tricky part is that most of the entries from passwd1 are already in
>passwd 2 but some have errors. (some of the password fields are locked,
>some of the group ids are wrong)
>Does anyone have a script (or know of one) that combines 2 passwd files
>that I can get a start from?  
>Thanks,
>John
>
>
>-- 
>"I fear all we have done is to awaken the sleeping giant and fill 
>him with terrible resolve"
>- Japanese Adm. Isoroku Yamamoto after the attack on Pearl Harbor
>
>-- 
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>


__________________________________________________________________
Your favorite stores, helpful shopping tools and great gift ideas. Experience the 
convenience of buying online with Shop@Netscape! http://shopnow.netscape.com/

Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to