on 4/30/02 4:28 AM, [EMAIL PROTECTED] purportedly said: > The list is in a file called "france" and contains users name like: > > miko > martha > > The file to control is the /etc/passwd: > > miko:Sn83kdmcsd4ee:816:1005:MirceaKovari:/tmp:/bin/selfa > nikol:Sn83kdmcsd4ee:816:1005:NiklaOlman:/tmp:/bin/selfa > > I need to put in a new file the line of user > "miko"(miko:Sn83kdmcsd4ee:816:1005:MirceaKovari:/tmp:/bin/selfa) that is > contained in the list(file france) but not "nikol" which is not contained > and so on for ol the list and all the /etc/passwd file.Thanks
It's fairly simple. The most flexible way, which assumes that the names in "list" are not necessarily in the same order as "passwd": # read in list file open LIST, "france" or die "$!"; @list = <LIST>; # read in whole file chomp( @list ); # remove trailing newines close LIST; # read passwd open PASS, "/etc/passwd" or die "$!"; @passwd = <PASS>; # read in whole file close PASS; @new_passwd = (); # create array to hold matching entries foreach $name ( @list ) { foreach $entry ( @passwd ) { if( $entry =~ /^$name:/ ) { push( @new_passwd, $entry ); last; # exit loop } } } # now @new_passwd has all matching entries from /etc/passwd. # It can be written to a file, or whatever. # write to file open FILE, ">passwd.new" or die "$!"; print FILE @new_passwd; close FILE; __END__ Keary Suska Esoteritech, Inc. "Leveraging Open Source for a better Internet"