use strict; use warnings; my $discard = scalar for 1 .. 2; # Use the line below instead of above if # you want to retain the column headers. # # print scalar for 1 .. 2; print map {$_->[0]} sort { $a->[1] cmp $b->[1] || $a->[2] cmp $b->[2] || $a->[5] cmp $b->[5] } map {[$_, split]} ; __END__ Col1 Col2 Col3 Col4 Col5 Col6 ======================================================== D1001 SNAM1 1 101 XYZ1234 21.11 D1001 SNAM1 1 102 XYZ2234 22.12 D1002 SNAM2 1 201 PQR2234 12.12 D1002 SNAM2 2 202 PQR2234 32.12 D1002 SNAM2 3 203 PQR2234 52.12 D1002 SNAM2 4 204 PQR2234 37.12 D1001 SNAM1 2 103 XYZ1234 22.12 D1003 SNAM3 1 301 ABC1234 22.12 D1002 SNAM2 5 205 PQR2234 37.12 D1001 SNAM1 4 104 XYZ1234 22.12