Gnu/coreutils/Version-sort-is-not-the-same-as-numeric-sort
Next: Punctuation Characters, Previous: Version-sort ordering rules, Up: Implementation Details [Contents][Index]
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).