排序不适用于 -h 文本文件

sort does not work with -h with text file

在我的 OS 中,我可以找到

-h, --human-numeric-sort
compare human readable numbers (e.g., 2K 1G)

我有一个文件aaa.txt:

2M
5904K
1G

然后我输入

sort -h aaa.txt

输出为

5904K
2M
1G

错了。应该是

2M
5904K
1G

问题:

  1. 为什么 sort -h 不起作用?即使从字典顺序的角度来看,结果也是错误的。如何以人类可读的数字对 aaa.txt 文件进行排序。
  2. 或者它只能与 du -h 一起使用?但是 the most vostes answer 似乎可以与 awk 一起使用。
  3. 对于 du -hsort not 是否需要指定哪个字段,例如 sort -k1h,1?为什么?如果内存大小不在第一个字段中会发生什么?

Why does sort -h not work?

以下是来自 GNU sort's source code 的评论。

/* Compare numbers ending in units with SI xor IEC prefixes
       <none/unknown> < K/k < M < G < T < P < E < Z < Y
   Assume that numbers are properly abbreviated.
   i.e. input will never have both 6000K and 5M.  */

手册页中未提及,但 -h 不适用于您的输入。

How to sort the aaa.txt file in human readable numbers.

您可以使用 numfmt to perform a Schwartzian transform,如下所示。

$ numfmt --from=auto < aaa.txt | paste - aaa.txt | sort -n | cut -f2
2M
5904K
1G