“sort”以奇怪的顺序产生输出

“sort”以奇怪的顺序产生输出

考虑以下输入进行排序:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

现在尝试运行sort foo

在我的任何 Linux 机器(GNU coreutils 版本 6.9-8.26)上尝试此操作时,输出未排序。我得到这个:

$ sort foo
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2

显然,所有带有 的行都D,应该在一起,并且-应该位于任何字母之前。

在 Cygwin (GNU coreutils 8.5) 下运行时,输出已排序。评论?

答案1

排序取决于区域设置;具体来说,它取决于$LC_COLLATE(可能被覆盖),如果它不存在则$LC_ALL回退到。$LANG该命令locale将向您显示正在有效使用的值。看man 3 strcoll,man 3 setlocale, ETC。

LC_COLLATE=C(或者POSIX根本没有语言环境)会导致严格的逐字节比较。

LC_COLLATE=en_US.utf8结果是按字母顺序进行等价排序,忽略标点符号并对同一等价类中的字符进行同等对待。

相关内容