Something like this :
use strict;
use warnings;
my %timing1;
chomp ($_=<DATA>); # Hdr
my @hdr = split /\s+/;
while (<DATA>){
chomp ;
s/^\s+//;
my @r=split /\s+/;
$timing1{$r[1]}{$r[2]}{$r[3]}{$r[0]}=$r[4];
}
foreach my $rName ( keys %timing1 ) {
foreach my $tType ( sort keys %{$timing1{$rName}}) {
foreach my $rF ( sort keys %{$timing1{$rName}{$tType}}){
+
my @by_val = map {[$timing1{$rName}{$tType}{$rF}{$_},$_]}
keys %{$timing1{$rName}{$tType}{$rF}};
@by_val = sort { $a->[0] <=> $b->[0]} @by_val;
foreach my $aref ( @by_val) {
my ($val, $pinName) = @$aref;
print " $pinName\t $rName\t $tType\t $rF\t $val \n";
}
}
}
}
__DATA__
pin Name related_pin time_type rise_fall delay
DQ5_RX_CLK M2CLKP c_rise rise_transition 0.014446
DQ2_RX_CLK M2CLKP c_rise rise_transition 0.014464
DQ0_RX_CLK M2CLKP c_rise rise_transition 0.014452
DQ3_RX_CLK M2CLKP c_rise rise_transition 0.014452
DQ7_RX_CLK M2CLKP c_rise rise_transition 0.014430
DQ4_RX_CLK M2CLKP c_rise rise_transition 0.014446
DQ8_RX_CLK INT_CLK c_fall fall_transition 0.199360
DQ6_RX_CLK INT_CLK c_fall fall_transition 0.199322
DQ1_RX_CLK INT_CLK c_fall fall_transition 0.199500
DQ5_RX_CLK INT_CLK c_fall fall_transition 0.199248
DQ2_RX_CLK INT_CLK c_fall fall_transition 0.199368
OUTPUT:
DQ7_RX_CLK M2CLKP c_rise rise_transition 0.014430
DQ4_RX_CLK M2CLKP c_rise rise_transition 0.014446
DQ5_RX_CLK M2CLKP c_rise rise_transition 0.014446
DQ3_RX_CLK M2CLKP c_rise rise_transition 0.014452
DQ0_RX_CLK M2CLKP c_rise rise_transition 0.014452
DQ2_RX_CLK M2CLKP c_rise rise_transition 0.014464
DQ5_RX_CLK INT_CLK c_fall fall_transition 0.199
+248
DQ6_RX_CLK INT_CLK c_fall fall_transition 0.199
+322
DQ8_RX_CLK INT_CLK c_fall fall_transition 0.199
+360
DQ2_RX_CLK INT_CLK c_fall fall_transition 0.199
+368
DQ1_RX_CLK INT_CLK c_fall fall_transition 0.199
+500
What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?
-Larry Wall, 1992