Hi Anirban,
first we have to be clear how you want to sort the lines.
Does 10-1 sort before 1-11 ?
Do you want numeric (use <=>) or alphabetic (use cmp) order?
> while (my $line = <$RFH>) {
> chomp($line);
> if ($line =~ m/.*?\-(\d+)\-(\d+).*/) {
> $sequence_no = "$1$2";
> # print "$sequence_no-- $line\n";
> $file_content_hash{$sequence_no}="$line";
> }
> }
this will only work as long as the sequence numbers are unique. If two
different lines have the same sequence number, the latter will be discarded.
My suggestion would be
#!/usr/bin/env perl
use 5.010;
use warnings;
use strict;
use autodie;
my $file_name = "RXMOI_TRX_CMD";
my @lines;
open(my $fh, "<", $file_name);
while(<$fh>) {
chomp;
if (/^RXMOI:MO=RXOTRX-([0-9]+)-([0-9]+)/) {
push @lines, [$_, $1, $2];
}
else {
warn("line '$_' does not match");
}
}
my @sorted = sort {
# if the numbers before the "-" are equal, compare the numbers after the "-"
$a->[1] <=> $b->[1] ? $a->[1] <=> $b->[1] : $a->[2] <=> $b->[2]
}
@lines;
say $_->[0] for @sorted;
You might also take a look at the section "Sorting Efficiently" in the
Alpacca book.
All the best, Simon
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/