2016-02-13 117 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