I'm not sure I'm clear on your requirements. It seems that you want to sort the matching lines but leave all the other lines in whatever location you found them.
my @lines = <DATA>; my @matching_indices = grep $lines[$_] =~ /id:\s?\d/, 0 .. $#lines; my @matching_lines = @lines[@matching_indices]; my @sorted_matching_lines = sort { my ($an) = ( $a =~ /id:\s?(\d+)/ ); my ($bn) = ( $b =~ /id:\s?(\d+)/ ); $an <=> $bn } @matching_lines; @lines[@matching_indices] = @sorted_matching_lines; print @lines; __DATA__ #Comment *ss id addr id: 099 bbb ccc aaa *ss id addr id: 003 aaa bbb ccc #Comment 2 *333 23 ss id: 002 aaa bbb ccc *22 233333333 34432 233 44
Here's the output:
#Comment *333 23 ss id: 002 aaa bbb ccc *ss id addr id: 003 aaa bbb ccc #Comment 2 *ss id addr id: 099 bbb ccc aaa *22 233333333 34432 233 44
In reply to Re: Please help with sorting/sort
by kyle
in thread Please help with sorting/sort
by learningperl01
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |