bash排序异常的顺序.空间问题?

lon*_*r21 7 sorting bash

很多时间都进入了一个bug,它追溯到排序......

有人解释为什么我得到这个未排序的结果,当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
Run Code Online (Sandbox Code Playgroud)

当然使用+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
Run Code Online (Sandbox Code Playgroud)

一些metainfo:

>type sort
sort is hashed (/bin/sort)
Run Code Online (Sandbox Code Playgroud)

我在用

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=
Run Code Online (Sandbox Code Playgroud)

cam*_*amh 9

我认为你看到的是基于语言环境的问题.一些(很多?)语言环境影响排序的工作方式,因为某些字符将被忽略.在这种情况下,当您未指定要排序的字段时,看起来字段之间的空间将被忽略.删除空格,您可以看到看起来像在错误位置的行是正确的.

如果使用其他语言环境运行sort,则可能会得到不同的结果:

$ LANG=C sort myfile.txt
Run Code Online (Sandbox Code Playgroud)

我的默认语言环境是en_AU.UTF-8,我看到你的原始排序结果.当我设置LANG = C时,我会看到您期望的结果.


Sie*_*geX 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
Run Code Online (Sandbox Code Playgroud)

也许您的版本需要该-n标志来打开数字排序?