Sort by third column leaving first and second column intact in Linux?

23,443

Try this:

sort  -t: -k1,1 -k3 data.txt

gives:

bast:disp-san-d5-06:piranha 
bast:display-san-12:redbird
bast:display-san-07:waverider
bast:display-san-12:waverider

This will sort with the 1st field as primary key, and the 3rd field as secondary key splitting the line into fields by :

Details:

data.txt contains the 4 lines from your post.

You can specify multiple fields as sorting keys, see the man page

-k1,1 means sort on the first field (start at field 1 and end at field 1, otherwise it would continue using the rest of the line for determining the sort)

-k3 means sort on the 3rd field as secondary key. Since there are no other fields behind it is not necessary to specify -k3,3 but it wouldn't hurt either.

-t: means delimit fields in lines with the : character, otherwise blank is used by default

More information see this SO question Sorting multiple keys with Unix sort and the sort man page

Share:
23,443
user1429246
Author by

user1429246

Updated on July 13, 2022

Comments

  • user1429246
    user1429246 almost 2 years

    I need to sort a flat file by third column leaving first column intact [First column is already sorted] (in linux). (second column may change)

    Example i/p file:-

    b:di:wave
    b:di12:red
    b:di12:wave
    b:di06:pir
    

    Should look like:-

    b:di06:pir
    b:di12:red
    b:di12:wave
    bast:di:wave
    

    I tried several sorting options but I could sort only by second column but not third.

    Can someone please help ?

  • Pat
    Pat about 12 years
    I think this will break the sorting of the first field. You still need to sort on the 1st, then 3rd field, even if input is already sorted on 1st field
  • Levon
    Levon about 12 years
    @Pat I think this will do it - thanks again for catching that .. with data given the problem wasn't obvious to me.
  • John Jiang
    John Jiang over 10 years
    plus 1 for great details!