Use a regex with captures, making the string part optional. Simply sorting by packed string then final number it is possible to get the numbers only lines at the start.
johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @data = qw{ this_5_string_12 some_12_garbage_23 this_5_string_8 17 this_5_string_23 some_12_garbage_6 102 this_5_string_19 5 this_5_string_101 }; my $width = 50; say for map { substr $_, 54 } sort map { do { no warnings qw{ uninitialized }; pack qq{A${width}NA*}, m{(.*\D)?(\d+)$}, $_; } } @data;' 5 17 102 some_12_garbage_6 some_12_garbage_23 this_5_string_8 this_5_string_12 this_5_string_19 this_5_string_23 this_5_string_101
To get the numbers only lines at the end involves substituting a "high values" string for the missing string part.
johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @data = qw{ this_5_string_12 some_12_garbage_23 this_5_string_8 17 this_5_string_23 some_12_garbage_6 102 this_5_string_19 5 this_5_string_101 }; my $width = 50; say for map { substr $_, 54 } sort map { do { m{(.*\D)?(\d+)$}; pack qq{A${width}NA*}, ( $1 ? $1 : qq{\x7f} x $width ), $2 +, $_; } } @data;' some_12_garbage_6 some_12_garbage_23 this_5_string_8 this_5_string_12 this_5_string_19 this_5_string_23 this_5_string_101 5 17 102
Sorting by final number then string mixes the numbers only lines in with the rest.
johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' my @data = qw{ this_5_string_12 some_12_garbage_23 this_5_string_8 17 this_5_string_23 some_12_garbage_6 102 this_5_string_19 5 this_5_string_101 }; my $width = 50; say for map { substr $_, 54 } sort map { do { no warnings qw{ uninitialized }; pack qq{NA${width}A*}, reverse( m{(.*\D)?(\d+)$} ), $_; } } @data;' 5 some_12_garbage_6 this_5_string_8 this_5_string_12 17 this_5_string_19 some_12_garbage_23 this_5_string_23 this_5_string_101 102
I hope this is helpful.
Cheers,
JohnGG
In reply to Re: Sorting text-number values
by johngg
in thread Sorting text-number values
by merrymonk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |