Sort by third column leaving first and second column intact in Linux?
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
user1429246
Updated on July 13, 2022Comments
-
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 about 12 yearsI 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 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 over 10 yearsplus 1 for great details!