【发布时间】:2011-08-20 01:06:08
【问题描述】:
我想通过linuxsort对一个文本文件进行排序,看起来像这样
v 1006
v10 1
v 1011
我希望得到这样的结果:
v 1006
v 1011
v10 1
但是,使用sort,即使有各种选项,v10 1 行仍然在中间。为什么?我会理解v10 1 要么在顶部,要么在底部(取决于空格字符是小于还是大于1),但是出于什么原因将其保留在中间?
【问题讨论】:
我想通过linuxsort对一个文本文件进行排序,看起来像这样
v 1006
v10 1
v 1011
我希望得到这样的结果:
v 1006
v 1011
v10 1
但是,使用sort,即使有各种选项,v10 1 行仍然在中间。为什么?我会理解v10 1 要么在顶部,要么在底部(取决于空格字符是小于还是大于1),但是出于什么原因将其保留在中间?
【问题讨论】:
您的语言环境会影响行的排序方式。例如,我用我当前的语言环境得到这个:
% 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 几乎等同于关闭所有意外处理并返回字节级操作(是的 - 我跳过了细节)。
为什么不同的语言环境设置会跳过空格很难解释。如果有人能解释一下就好了:)
【讨论】:
它使用系统语言环境来确定字母的排序顺序。我的猜测是,使用您的语言环境,它会忽略空格。
$ 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
【讨论】:
; 放入LC_ALL=en_US.utf8 ; sort foo.txt。不过行为上还是有区别的。如果您执行SOME_VAR=foo some_command parameters,您正在执行 some_command 及其参数,并且环境变量 SOME_VAR 等于 foo,但仅针对此命令。如果返回shell后你echo $SOME_VAR,它会有原来的值,而不是foo