#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %groups; $groups{'g1'} = ['a'..'g']; $groups{'g2'} = ['h'..'n']; $groups{'g3'} = ['o'..'u']; $groups{'g4'} = ['v'..'z']; my %lookup; for my $grp (keys %groups){ %{$lookup{$grp}} = map {$_ => undef} @{$groups{$grp}}; } my %output; while(my $line=){ chomp($line); my $usr=substr($line,8,2); my $time=substr($line,0,4); my $username_string = substr($line,11); my @usernames= split ',', $username_string; for my $name (@usernames){ for my $grp (keys %lookup){ $output{$time}{$grp}++ if exists $lookup{$grp}{$name}; } } } for my $time (sort keys %output){ print "$time\t"; for my $grp (sort keys %groups){ my $logged_in = 0; $logged_in = $output{$time}{$grp} if exists $output{$time}{$grp}; print "$logged_in ($grp) users\t"; } print "are logged in\n"; } __DATA__ 1.00 50 10 x,y,z,w,u,e,g,j,k,a 1.10 50 13 x,y,b,a,g,j,k,r,,n,m,s, 1.20 50 05 c,t,g,q,f 1.50 50 08 a,t,y,w,z,x,s,b 2.00 50 14 x,y,u,b,g,f,s,a,i,o,p,c