use strict; use warnings; use diagnostics; use Data::Dumper qw(Dumper); our (@uniqueMac); while (<>) { my ($dateHour,$usrMac,$apMac) = (/regex/); push (@usrMac, $usrMac); @uniqueMac = map {$_ = 1} @usrMac; push (@array, $dateHour{$apMac} = scalar(@uniqueMac); } print @array; #### Date , Hour: AP# : Unique Devices per AP per Hour $dateHour : $apMac : scalar(@uniqueMac) 2014-04-07, Hour 01: AP1 : 301 2014-04-07, Hour 01: AP2 : 313 2014-04-07, Hour 01: AP3 : 132 . . . every hour per day . . . 2014-04-07, Hour 21: AP1 : 130 2014-04-07, Hour 21: AP2 : 310 2014-04-07, Hour 21: AP3 : 13 . . . for every day . . . 2014-04-08, Hour 01: AP1 : 302 2014-04-08, Hour 01: AP2 : 321 2014-04-08, Hour 01: AP3 : 131 . . . every hour per day . . . 2014-04-08, Hour 22: AP1 : 122 2014-04-08, Hour 22: AP2 : 234 2014-04-08, Hour 22: AP3 : 311