#!/usr/bin/perl use strict; use warnings; my ($gid, $grp, $host, $group, $userid); my %table; open FILE, "< /path/to/usrgrps.txt"; foreach () { chomp; ($host, $grp, $gid, $userid) = split /:/; $group = "$grp:$gid"; if (length ($userid) != 0) { (defined $table{$group} && $table{$group} =~ /$_/) ? next : ($table{$group}.="$_,") foreach (split /,/, $userid); } else { $table{$group} = ""; } } close FILE; foreach (sort keys %table) { $table{$_} =~ s/,$//; print "$_:$table{$_}\n"; }