Gnu/coreutils/Version-sort-is-not-the-same-as-numeric-sort

From Get docs

30.2.2 Version sort is not the same as numeric sort

Consider the following text file:

$ cat input4
8.10
8.5
8.1
8.01
8.010
8.100
8.49



Numerical Sort:                   Version Sort:

$ sort -n input4                  $ sort -V input4
8.01                              8.01
8.010                             8.1
8.1                               8.5
8.10                              8.010
8.100                             8.10
8.49                              8.49
8.5                               8.100

Numeric sort (‘sort -n’) treats the entire string as a single numeric value, and compares it to other values. For example, 8.1, 8.10 and 8.100 are numerically equivalent, and are ordered together. Similarly, 8.49 is numerically smaller than 8.5, and appears before first.

Version sort (‘sort -V’) first breaks down the string into digits and non-digits parts, and only then compares each part (see annotated example in Version-sort ordering rules).

Comparing the string 8.1 to 8.01, first the ‘8’ characters are compared (and are identical), then the dots (‘.’) are compared and are identical, and lastly the remaining digits are compared numerically (1 and 01) - which are numerically equivalent. Hence, 8.01 and 8.1 are grouped together.

Similarly, comparing 8.5 to 8.49 - the ‘8’ and ‘.’ parts are identical, then the numeric values 5 and 49 are compared. The resulting 5 appears before 49.

This sorting order (where 8.5 comes before 8.49) is common when assigning versions to computer programs (while perhaps not intuitive or ’natural’ for people).