2010-12-20 47 views
6

很多時間去了一個錯誤,它追溯到排序...bash排序異常。問題與空間?

有人可以解釋爲什麼我得到這個unsorted結果,當bash文檔告訴我,分隔符是從白色過渡到非白色字符?不應該排序第一個字段嗎?

>sort myfile.txt 
10_10000000 19 
10_10000001 20 
10_10000002 19 
10_10000003 17 
10_10000004 16 
10_1000000 44 
10_10000005 16 
10_10000006 16 
10_10000007 17 
10_10000008 16 
當然使用+0

-1給我我預期的結果:

>sort +0 -1 myfile.txt 
10_1000000 44 
10_10000000 19 
10_10000001 20 
10_10000002 19 
10_10000003 17 
10_10000004 16 
10_10000005 16 
10_10000006 16 
10_10000007 17 
10_10000008 16 

一些元信息:

>type sort 
sort is hashed (/bin/sort) 

我使用

sort (GNU coreutils) 5.97 


>locale 
LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 
+1

您使用的是什麼版本的「排序」?在什麼操作系統? 'sort sort'的輸出是什麼? – 2010-12-20 21:58:08

+0

另外,'locale'的輸出是什麼? – ephemient 2010-12-20 23:19:16

+0

Bash不知道如何排序 - 'sort'是一個外部工具。 '>'是Bash的不尋常提示。 – 2010-12-21 00:54:01

回答

2

工程右我:

$ sort myfile.txt 
10_1000000 44 
10_10000000 19 
10_10000001 20 
10_10000002 19 
10_10000003 17 
10_10000004 16 
10_10000005 16 
10_10000006 16 
10_10000007 17 
10_10000008 16 

$ sort --version 
sort (GNU coreutils) 8.5 

也許你的版本需要-n標誌打開數字排序?

9

我想你看到的是基於區域的問題。一些(許多?)語言環境會影響排序的工作方式,因爲某些字符將被忽略。在這種情況下,當您不指定要排序的字段時,它看起來像字段之間的空間被忽略。刪除空間,你可以看到,看起來像是在錯誤的地方的行是正確的。

如果你用不同的語言環境排序運行,你可能會得到不同的結果:

$ LANG=C sort myfile.txt 

我的默認語言環境是en_AU.UTF-8,我看你原來的排序結果。當我設置LANG = C時,我看到了你期待的結果。

+0

我不得不使用'LC_ALL = C'而不是'LANG = C'。 – Mark 2016-08-15 11:25:13