Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash排序异常顺序。空间有问题吗?_Bash_Sorting - Fatal编程技术网

bash排序异常顺序。空间有问题吗?

bash排序异常顺序。空间有问题吗?,bash,sorting,Bash,Sorting,很多时间都在一个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 1

很多时间都在一个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
当然,使用+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
一些元信息:

>type sort
sort is hashed (/bin/sort)
我正在使用

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=
适合我的作品:

$ 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

也许您的版本需要
-n
标志来启用数字排序?

我认为您看到了基于区域设置的问题。某些(许多?)地区会影响排序的工作方式,因为某些字符将被忽略。在本例中,如果不指定要排序的字段,则字段之间的空格似乎被忽略。删除空格,您可以看到看起来位于错误位置的行是正确的

如果使用不同的区域设置运行排序,可能会得到不同的结果:

$ LANG=C sort myfile.txt

我的默认区域设置是en_AU.UTF-8,我可以看到原始排序结果。当我设置LANG=C时,我看到了您期望的结果。

您使用的是什么版本的
sort
?在什么操作系统上?
类型排序的输出是什么?
区域设置的输出是什么?
Bash对排序一无所知-
排序是一个外部实用程序<代码>>
是对Bash的一个不寻常的提示。@peter:我使用的是sort(GNU coreutils)5.97,CentOS 5,x86_64。排序类型的输出。。。排序是散列的(/bin/sort),看起来@camh的答案是正确的。它解决了你的问题吗?我不得不使用
LC_ALL=C
而不是
LANG=C