coreutils: Version sort is not the same as numeric sort
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).