This Perl program does what you ask. It allows for any number of fields for each parameter (although there must be the same number of fields for every parameter) and takes the header labels for the fields from the data itself.
use strict;
use warnings;
my $file = 'sample.txt';
open my $fh, '<', $file or die qq{Can't open "$file" for input: $!};
my %data;
my @params;
my @fields;
while (<$fh>) {
next unless /\S/;
chomp;
my ($key, $val) = split /\s*:\s*/;
if ($val =~ /\S/) {
push @fields, $key if @params == 1;
push @{ $data{$params[-1]} }, $val if @params;
}
else {
die qq{Unexpected parameter format "$key"} unless $key =~ /parameter\s+(\d+)/i;
push @params, $1;
}
}
my @headers = ('Parameter', @fields);
my @widths = map length, @headers;
my $format = join(' ', map "%${_}s", @widths) . "\n";
printf $format, @headers;
for my $param (@params) {
printf $format, $param, @{ $data{$param} };
}
output
Parameter Field 1 Field 2 Field 3
0 100 0 4
1 873 23 89