You only seem to be interested in the data that matches a single age followed by three decimal numbers. The regex in the following code looks for this pattern and extracts it into an array. Once you have it in this form you can manipulate it as you like.
while (<FILE>)
{
my @data;
if (@data = /\b(\d+)\b\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)/)
{
print "@data\n";
}
}
Updated
I was on the right track but I hadn't spent enough time on the problem. I have corrected the issue for more than one set of data per line and added a rather ugly bit to capture the ' and over' part in the data...
my %info;
while (<>)
{
my @data;
while (/\b(\d+)\b(?: and over)?\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.
+\d+)/gc)
{
$info{$1} = [$2,$3,$4];
}
}
foreach (sort {$a<=>$b} keys %info)
{
print "$_ ", join(' ', @{$info{$_}}), "\n";
}