in reply to Count the Duplicate Entries and make them uniq
Build a data structure from the relational layout you have provided aggregating the Yes and No entries and then walk the resulting structure to print the desired results. For safety you could add some data validation.
use feature ":5.14"; use warnings FATAL => qw(all); use strict; use Data::Dump qw(dump pp); my @l = split /\n/, << 'END'; Ubuntu,Warty,No Ubuntu,Hoary,No Ubuntu,Breezy,Yes Ubuntu,Breazy,Yes Fedora,Yarrow,Yes Fedora,Stentz,No Fedora,Yarrow,Yes Fedora,Yarrow,Yes Windows,XP PRO,Yes Windows,XP PRO,Yes Windows,XP Home,No Windows,XP PRO,Yes END my $h; for(@l) {my @w = split /,/; $h->{$w[0]}{$w[1]}{$w[2]}++; } pp($h); for my $o(sort keys %$h) {for my $r(sort keys %{$h->{$o}}) {my %yn = %{$h->{$o}{$r}}; my ($yes, $no) = ($yn{Yes}//0, $yn{No}//0); say "$o\t$r\t$yes\t$no"; } }
Produces
{
Fedora => { Stentz => { No => 1 }, Yarrow => { Yes => 3 } },
Ubuntu => {
Breazy => { Yes => 1 },
Breezy => { Yes => 1 },
Hoary => { No => 1 },
Warty => { No => 1 },
},
Windows => { "XP Home" => { No => 1 }, "XP PRO" => { Yes => 3 } },
}
Fedora Stentz 0 1
Fedora Yarrow 3 0
Ubuntu Breazy 1 0
Ubuntu Breezy 1 0
Ubuntu Hoary 0 1
Ubuntu Warty 0 1
Windows XP Home 0 1
Windows XP PRO 3 0
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Count the Duplicate Entries and make them uniq
by slayedbylucifer (Scribe) on Aug 29, 2012 at 15:20 UTC | |
|
Re^2: Count the Duplicate Entries and make them uniq
by slayedbylucifer (Scribe) on Aug 30, 2012 at 04:20 UTC |