in reply to Double Sort on a file

Thanks for the tips, but maybe this might help to get my idea through.

I have a list with three columns.

2 4 a ##end of row 1## 1 9 b ##end of row 2## 6 8 a ##end of row 3##
i want the sort to sort by string first and then reverse sort numerically to get the following do the following:
6 8 a ##end of row 1## 2 4 a ##end of row 2## 1 9 b ##end of row 3##
sorry for the confusion

Edit by dws to add <code> tags

Replies are listed 'Best First'.
Re: Double Sort Rephrased
by ignatz (Vicar) on Jul 22, 2002 at 23:35 UTC
    Funny, I've just been working on something similar to this.

    Your problem sounds perfect for the Sort::Fields module. It does reverse or numeric sorts on what ever columns you specify.

    ()-()
     \"/
      `                                                     
    
      I don't have the latest version of perl, is there any other way around this?
        Earlier than the module's required 5.003_03? Ouch! I don't think so. Time to take that washboard in for a new model.
        ()-()
         \"/
          `                                                     
        
Re: Double Sort Rephrased
by mkmcconn (Chaplain) on Jul 22, 2002 at 22:58 UTC

    You want to sort the whole row as a string, then sort on the first column numerically, correct?

    #!/usr/bin/perl -w use strict; my @sorted = map {$_->[0]} sort { $a->[0] cmp $b->[0] || $b->[1] <=> $a->[1] } map {[ $_ ,/(\w+)\s+(\w+)\s+(\w+)/]} <DATA> ; print for @sorted; __END__ 2 4 a 1 9 b 6 8 a

    UPDATED

    My mistake- I thought you were asking a perl perlfunc:sort question, rather than Gnu sort. (I also didn't realize that this was a mid-thread revision of the subj. line .). For a perl question, then you would be looking for...

    my @sorted = map {$_->[0]} sort { $a->[3] cmp $b->[3] || # sorted ascending alpha on col 3 $b->[2] <=> $a->[2] # then sorted reverse num on col 2 } map {[ $_ ,/(\w+)\s+(\w+)\s+(\w+)/]} <DATA> ; print for @sorted;

    (I think..)
    UPDATED2
    Gnu sort's index starts with 0. The last column would be "2" not "3". Does this help, rchou2?
    mkmcconn

      no, i have a file with the three columns, and i want to sort first based on the last column and then sort the second column numerically......and i need to sort the file....i tried using sort -k 3 -n -r -k 2 filein -o fileout but it didn' get the results i expected
        well, it is a perl question...i'm trying to modify the file through perl....