joseph wrote: > > I need help with my script, this supposedly would check a workstation listed > in one file then see if it's not listed on other file, if it 's the case > then append it on an output file.Basically what i got is the same unmodified > list just appended on the output file. Where did i got wrong? TIA. > > #!/usr/bin/perl -w > > use strict; > use Data::Dumper; > > open(FL1,"pclist.txt") or die "can't open pclist.txt $!"; > open(FL2,"smsclient.txt") or die "can't open smsclient.txt $!"; > open(OUTPUT,">>unlisted.txt") or die "can't open pclist.txt $!"; > > my @smsclient = <FL1>; > my @pclist = <FL2>; > my %hash = map { $_ => 1 } @pclist; > > foreach my $key (@smsclient) { > chomp($key); > unless(exists $hash{$key}){ > print OUTPUT $key,"\n"; > } > } > > close(FL1); > close(FL2); > close(OUTPUT);
Hi Joseph You've used the raw file records in @pclist as keys for your hash, but then 'chomp'ed the data in @smsclient before you look for a match. Nothing will compare as equal because one set has trailing "\n" characters while the other doesn't. By the way, you're putting the stuff from pclist.txt into @smsclient and vice versa, which could confuse things a little. You may like my version of this program, which works fine with my data. One proviso though: I don't know which of your files is which, so you may need to swap the filenames. This prints all names in smsclient.txt that aren't in pclist.txt. HTH, Rob use strict; use warnings; my %pclist = do { open my $fh, 'pclist.txt' or die $!; chomp (my @data = <$fh>); map { $_ => 1 } @data; }; open my $fh, 'smsclient.txt' or die $!; open my $out, '>>', 'unlisted.txt' or die $!; while (<$fh>) { chomp; print $out "$_\n" unless $pclist{$_}; } close $out; close $fh; -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>