2016-02-13 119 views
4

bash使用sort-n选项不会给我预期的结果。在bash中对带有多位小数的数字排序

$ 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 

我试着用-k1-k1.1n等(-k1.3n只能得到与1开始编号正确的顺序)。这似乎有一些非常基本的东西,我在这里想念...

回答

5

你需要-t。标志来指定'。'作为分隔符,多个键位置说明符处理逐渐变长/更深的数字。我还是不太明白究竟它是如何工作的,但它的工作原理...

sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n numbers 

cat numbers | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n 
3

有一个特殊的标志这个-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 

ps。这个选项在GNU Coreutils中可用,在其他实现中可能会丢失。

+2

这不是OSX上的有效选项。 –

+1

作为次要利益的一点:与OS X实际上'排序'实际上_is_ GNU'排序',但它是非常古老的,并且支持'-V';从OS X 10.11开始,版本号是'sort(GNU coreutils)5.93'。 – mklement0