use strict; use warnings; my %entries; my $key; my $host; while () { chomp; next if ! length; if (m|^/|) { $host = $_; } elsif (/(\w+)\s+(\d+)\s+(\d+)\s+(.*)/) { my ($name, $uid, $gid, $gecos) = ($1, $2, $3, $4); $entries{$name}{$uid} = { # User data keyed by uid gid => $gid, gecos => $gecos, host => $host, }; } else { print "Can't parse >$_<\n"; } } my @unlike = grep {keys (%{$entries{$_}}) > 1} keys %entries; print "@unlike"; __DATA__ /var/tmp/passwd.hostname1.platform nguyenhe 1929 20 Henry Nguyen,555-555-555 bjose 1990 20 Bobby Jose,x3338 /var/tmp/passwd.hostname2.platform vjain 2098 20 Vineet Kumar Jain, offshore llai 2122 20 Levius Lai bjose 1995 20 Bobby Jose,x3338