$ perl -Mstrict -Mwarnings -Mautodie -le '
use Tie::File;
tie my @input_records, "Tie::File", "./pm_1054101_input.txt";
open my $out_fh, ">", "./pm_1054101_output.txt";
print $out_fh $input_records[$_] for
map { $_->[0] }
sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] }
map { [ $_, map { substr $_, 3 } (split " ", $input_records[$_])[0,1] ] }
0 .. $#input_records;
close $out_fh;
untie @input_records;
'
####
$ cat pm_1054101_input.txt
key1 key2 ndnjfgdsjfjjkjjfjf...
key1 key2 kdfkjdfgdfugbjndkfgkjgndkjfjkd
key43 key21 sdkjfhdghdbgbd
key1 key3 jujdejnsduhffnjj
key2 key2 jhzezhdjjf...
####
$ cat pm_1054101_output.txt
key1 key2 ndnjfgdsjfjjkjjfjf...
key1 key2 kdfkjdfgdfugbjndkfgkjgndkjfjkd
key1 key3 jujdejnsduhffnjj
key2 key2 jhzezhdjjf...
key43 key21 sdkjfhdghdbgbd
####
$ ls -l pm_1054101_*
-rw-r--r-- 1 ken staff 159 14 Sep 22:41 pm_1054101_input.txt
-rw-r--r-- 1 ken staff 159 14 Sep 23:04 pm_1054101_output.txt
####
$ perl -Mstrict -Mwarnings -Mautodie -le '
use Tie::File;
tie my @input_records, "Tie::File", "./pm_1054101_input.txt";
my @sorted_record_numbers
= map { $_->[0] }
sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] }
map { [ $_, map { substr $_, 3 } (split " ", $input_records[$_])[0,1] ] }
0 .. $#input_records;
open my $out_fh, ">", "./pm_1054101_output.txt";
for (@sorted_record_numbers) {
print $out_fh $input_records[$_];
}
close $out_fh;
untie @input_records;
'