在bash中对多个小数进行排序

l'L*_*L'l 6 linux sorting bash

bash使用sort-n选择不给我预期的结果.

$ cat numbers | sort -n
1.0
1.1
1.11.4
1.15
1.3
1.3.3
1.4-p1
1.6.1
2.2.10
2.2.2
2.4
2.4.6
Run Code Online (Sandbox Code Playgroud)

我尝试使用-k1,-k1.1n等等(-k1.3n只有开头的数字才能使订单正确1).看来这里有一些我非常基本的东西......

kar*_*kfa 9

-V版本号有一个特殊的标志

$ sort -V numbers

1.0
1.1
1.3
1.3.3
1.4-p1
1.6.1
1.11.4
1.15
2.2.2
2.2.10
2.4
2.4.6
Run Code Online (Sandbox Code Playgroud)

PS.此选项在GNU Coreutils中可用,在其他实现中可能会丢失.

  • 这不是OSX上的有效选项. (2认同)
  • 作为一个小问题点:OS X附带的`sort`实际上是_is_ GNU`sort`,但它很老了,早于支持`-V`; 从OS X 10.11开始,版本号为`sort(GNU coreutils)5.93`. (2认同)
  • @mklement0:看来他们已经将 `-V` 添加到 macOS `sort --version 2.3-Apple (99)`。 (2认同)

小智 7

sort -g numbers
Run Code Online (Sandbox Code Playgroud)

它会做。根据排序手册页,-g用于数字排序:

-g, --general-numeric-sort

按一般数值比较


Bud*_*ssy 6

你需要-t.用于指定'.'的标志 作为您的分隔符,多个键位置说明符处理逐渐更长/更深的数字.我仍然不太确切地知道它是如何工作的,但是它有效......

 sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n numbers
Run Code Online (Sandbox Code Playgroud)

要么

 cat numbers | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n
Run Code Online (Sandbox Code Playgroud)