GNU bug report logs -
#67690
Bug in command sort?
Previous Next
Full log
Message #8 received at 67690 <at> debbugs.gnu.org (full text, mbox):
tag 67690 notabug
close 67690
stop
On 07/12/2023 14:36, Oleg Moiseichuk via GNU coreutils Bug Reports wrote:
> Hello!
>
> I've got a list of IP addresses, each of them is prepended by its frequency counter (please find attached in the file list-1.txt). I need to sort them from most frequent to least. I tried using this command:
> sort -t '.' -n -k 1.1,1.8r -k 1.9 -k 2,2 -k 3,3 -k 4,4 list-1.txt
> But I've got some weird results.
Right, once you have multiple delimiters you generally need to adjust the data
> Ok, I merged these counters with IP addresses using awk (file list-2.txt). Now they use the same separator and I can simplify the command:
> sort -t '.' -n -k 1,1r -k 2,2 -k 3,3 -k 4,4 -k 5,5 list-2.txt > sorted-a.txt
> It looks like as sorted properly but some entries with the counters 13 and 10 are misplaced.
> Strangely enough, when I use direct order, they are sorted correctly:
> sort -t '.' -n -k 1,1 -k 2,2 -k 3,3 -k 4,4 -k 5,5 list-2.txt > sorted-b.txt
You're using the correct approach here, but missed this from the docs:
"A position in a sort field specified with ‘-k’ may have any of the
option letters ‘MbdfghinRrV’ appended to it, in which case no global
ordering options are inherited by that particular field."
I.e. the 'r' is cancelling out the global 'n'.
So you need to specify both options from that field like:
sort -t '.' -n -k 1,1rn -k 2,2 -k 3,3 -k 4,4 -k 5,5 list-2.txt
cheers,
Pádraig
p.s. the --debug option can be useful with sort to
help identify what's being compared, and various edge cases.
This bug report was last modified 1 year and 229 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.