On Wed, 14 Nov 2001 12:42:44 -0800, ehughes wrote: >I have some simple files to parse. The data looks like this: > >54 6342059 >80 6342059 >31 6158566 ....
>The first column is an activity code and the second column is a client id >number. > >Here is my task. I need to find the number of unique individuals that >participated in each activity. Now the boring, tedious way would be to write >something like this: > >for my $row { > $act_54{$row1} if (column1 == "54"); > $act_80{$row1} if (column1 == "80"); > $act_90{$row1} if (column1 == "90"); >} >print scalar (keys %act_54); >print scalar (keys %act_80); >print scalar (keys %act_90); This looks like fake code to me. >Surely, there is something that will capture the data a little easier than >defining a variable for each activity. There are more than 30 activities. Why don't you use a hash of hashes? Assuming that $activity can be something like "54" and $client like "6342059", this may do: while(<>) { chomp; my($activity, $client) = split /\s+/; $act{$activity}{$client}++ } local($\, $,) = ("\n", " "); foreach my $activity (sort { $a <=> $b} keys %act) { print "$activity:", sort keys %{$act{$activity}}; } -- Bart.