我想通过linux sort
对文本文件进行排序,看起来像这样
v 1006
v10 1
v 1011
我希望结果如下:
v 1006
v 1011
v10 1
但是,使用sort
,即使有各种选项,v10 1
行仍处于中间位置。为什么?我会理解v10 1
要么位于最底层(取决于空格字符是否小于或大于1
),但出于什么原因它保持在中间位置?
答案 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
几乎等同于关闭所有意外处理并返回字节级操作(是的 - 我正在跳过细节)。
为什么不同的区域设置跳过空间更难以解释。如果有人能解释那会很好:)