bash排序异常的顺序.空间问题?
发布时间:2020-12-16 01:09:39 所属栏目:安全 来源:网络整理
导读:很多时间都进入了一个bug,它追溯到排序…… 有人解释为什么我得到这个未排序的结果,当bash文档告诉我分隔符是从白色到非白色字符的转换?不应该对第一个字段进行排序吗? sort myfile.txt10_10000000 1910_10000001 2010_10000002 1910_10000003 1710_100000
很多时间都进入了一个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 一些metainfo: >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,则可能会得到不同的结果: $LANG=C sort myfile.txt 我的默认语言环境是en_AU.UTF-8,我看到你的原始排序结果.当我设置LANG = C时,我会看到您期望的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |