#!/usr/bin/perl use strict; use warnings; my %HoA; while () { if (/(\d+)\s+(.*?)\[/) { push @{$HoA{$1}}, $2; } else { warn "Unknown data format: $_\n"; } } foreach my $k (sort keys %HoA) { print "$k\n\t@{$HoA{$k}}\n"; } __DATA__ 10 a[ 11 b[ 12 c[ 13 d[ 14 e[ 15 f[ 16 g[ 17 h[ 18 i[ 19 j[ 20 k[ 10 l[ 11 m[ 12 n[ 13 o[ 14 p[ 15 q[ 16 r[ 17 s[ 18 t[ 19 y[ 20 v[ #### 10 a l 11 b m 12 c n 13 d o 14 e p 15 f q 16 g r 17 h s 18 i t 19 j y 20 k v