Vahid Moghaddasi wrote:
Hi all,

Hello,

I am trying to read a colon delimited text file (filter.in) then
search for each field in another file (/etc/passwd) and if it is found
then write that line in the third file (passwd.out). Here is what I
have written so far but it is not given me the correct result. Thanks
for any help.


#!/bin/perl
#
# the format of filter.in is user1:user2:user3:user4:
#
use File::Copy;
use strict;
use warnings;
$|=1;           # flush output buffer
open (FILTERfh, "< filter.in") || die "Can not open filter.in: $!\n";
open PASSWDfh, '</etc/passwd' or die "Can not open the file: $!\n";
open PASSWDFILfh, ">passwd.out";
while (<FILTERfh>) {
chomp;
my @input = split /:/, $_;
   for (my $user = 1; $user <= $#input ; $user++) {
       print "$input[$user] is being added.\n";
       while (<PASSWDfh>) {
               my %seen;
               next if (m/^#/);        # Skip comments
               next if (m/^\s*$/);     # Skip blank lines
               my ($field1) = /([^:]+)/;
#      print PASSWDFILfh $_ unless $seen{$field1} or warn
#      "WARNING: User $input[$user] does not exist!\n";
     print PASSWDFILfh $_ unless $input[$user] or warn
     "WARNING: User $input[$user] does not exist!\n";
# print PASSWDFILfh $_ if("$field1" eq "$input[$user]");
#        print PASSWDFILfh $_ if( grep(/$field1:/, $_ )) or warn
"WARNING: User $input[$user] does not exist!\n";
    } # while
} # for
} # while
close FILTERfh;
close PASSWDFILfh;
close PASSWDfh;

Something like this should work:

#!/bin/perl
#
# the format of filter.in is user1:user2:user3:user4:
#
use strict;
use warnings;

open FILTERfh,    '<', 'filter.in'  or die "Can not open filter.in: $!\n";
open PASSWDFILfh, '>', 'passwd.out' or die "Can not open passwd.out: $!\n";

while ( <FILTERfh> ) {
    chomp;
    my @input = split /:/;
    for ( @input ) {
        if ( getpwnam $_ ) {
            print PASSWDFILfh $_;
            }
        else {
            warn "WARNING: User $_ does not exist!\n";
            }
        }
    }

close FILTERfh;
close PASSWDFILfh;




John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to