use strict; use warnings; my %h; while (){ chomp; next if length($_) < 30; my ($k1, $k2,$k3, $val) = unpack("A8 x1 A15 x1 A33 x1 A5", $_); $h{$k1}{$k2}{$k3} += $val; } for my $k1 (sort keys %h){ print "$k1\n"; for my $k2 ( sort keys %{ $h{$k1} } ) { print "\t$k2\n"; for my $k3 ( sort keys %{ $h{$k1}{$k2} } ) { print "\t\t$k3 $h{$k1}{$k2}{$k3}\n"; } } } __DATA__ Summary Detial_Summary EMC CHECK abcdefghi AZ_checker 1 20.32 Summary Detial_Summary EMC CHECK abcdefghi AZ_checker 1 24.00 Summary1 Detial_Summary1 EMC CHECK1 abcdefghi AZ_checker 1 20.59 Summary1 Detial_Summary1 EMC CHECK1 abcdefghi AZ_checker 1 24.00