# Sort-Of-Numeric Sorting

The standard `sort`

command available in Unix-like systems offers a
“human numeric” sorting option, described as follows in the flag
description for `--human-numeric`

in Coreutils
9.1:

`-h`

,`--human-numeric-sort`

compare human readable numbers (e.g., 2K 1G)

In computing, there’s some controversy about whether SI suffixes
should be interpreted with their usual base-ten meanings, so 1K is
10^{3}
= 1,000, or interpreted with often-more-convenient
base-two meanings, so 1K is 2^{10}
= 1,024. With the `sort`

command, the answer is “neither.” For example, no matter which
interpretation of SI suffixes you use, 2,000 is clearly larger than
1K. But let’s see what `sort`

thinks:

```
$ sort -h <<EOF
1K
2000
EOF
2000
1K
```

No matter what you were expecting, that wasn’t what you expected. The man page explains what’s happening:

`-h`

`--human-numeric-sort`

`--sort=human-numeric`

Sort numerically, first by numeric sign (negative, zero, or positive); then by SI suffix (either empty, or`k`

or`K`

, or one of`MGTPEZY`

…); and finally by numeric value. For example,`1023M`

sorts before`1G`

because`M`

(mega) precedes`G`

(giga) as an SI suffix. This option sorts values that are consistently scaled to the nearest suffix, regardless of whether suffixes denote powers of 1000 or 1024…

So human numeric sorting is actually a *lexicographic* sort, first on
the sign, then on the SI unit, and only then on the number.