On 05/11/2021 09:31, Yang Yanchao wrote:
Dear Coreutils Maintainers,

When I sort the use cases using "sort":
[root@localhost test]# cat test
1.2.v1.6
1.0.v3.5
1.10.v2.4
[root@localhost test]# sort -n -t'.' -k3,3 -k4,4 test
1.10.v2.4
1.0.v3.5
1.2.v1.6

The order I expected should be like this.
1.2.v1.6
1.10.v2.4
1.0.v3.5

It looks like the third column is alphabetic, and I added the -n option, which 
was ignored, but I used -k to specify the third column as the first 
priority.This means that -k has a lower priority than -n? Does this fit the 
intended design?

If you use the --debug option it shows -k3,3 is not matching
(due to not being numeric):

  $ printf '%s\n' 1.2.v1.6 | sort -n -t'.' -k3,3 -k4,4 --debug
  sort: text ordering performed using ‘en_IE.UTF-8’ sorting rules
  1.2.v1.6
      ^ no match for key
         _

You probably want to restrict the numeric comparison to field 4 (with -k4,4n).
You probably also want to use --version-sort on field 3
rather than lexicographically (with -k3,3V), so that v10 sorts after v9:

$ printf '%s\n' 1.2.v10.6 1.0.v3.5 1.10.v2.4 |
  sort -t'.' -k3,3V -k4,4n --debug
1.10.v2.4
     __
        _
1.0.v3.5
    __
       _
1.2.v10.6
    ___
        _

cheers,
Pádraig

Reply via email to