排序未按预期排序(空间和区域设置)

时间:2011-05-06 09:27:10

标签: linux sorting

我想通过linux sort对文本文件进行排序,看起来像这样

v 1006
v10 1
v 1011

我希望结果如下:

v 1006
v 1011
v10 1

但是,使用sort,即使有各种选项,v10 1行仍处于中间位置。为什么?我会理解v10 1要么位于最底层(取决于空格字符是否小于或大于1),但出于什么原因它保持在中间位置?

2 个答案:

答案 0 :(得分:16)

它使用系统区域设置来确定字母的排序顺序。我的猜测是,使用您的语言环境,它会忽略空格。

$ cat foo.txt 
v 1006
v10 1
v 1011
$ LC_ALL=C sort foo.txt
v 1006
v 1011
v10 1
$ LC_ALL=en_US.utf8 sort foo.txt
v 1006
v10 1
v 1011

答案 1 :(得分:4)

您的区域设置会影响线条的排序方式。例如,我使用当前的语言环境得到了这个:

% echo -e "v 1006\nv10 1\nv 1011" | sort
v 1006
v10 1
v 1011

但是使用C语言环境我得到了这个:

% echo -e "v 1006\nv10 1\nv 1011" | LC_ALL=C sort
v 1006
v 1011
v10 1

我不确定为什么它真的那样。 LC_ALL=C几乎等同于关闭所有意外处理并返回字节级操作(是的 - 我正在跳过细节)。

为什么不同的区域设置跳过空间更难以解释。如果有人能解释那会很好:)