加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

意外的bash排序行为

发布时间:2020-12-15 17:00:01 所属栏目:安全 来源:网络整理
导读:如果我创建包含以下行的文本文件: TESTTEXT_10000000TESTTEXT_1000000TESTTEXT_10000002TESTTEXT_10000001 并执行sort myfile,我的输出是 TESTTEXT_1000000TESTTEXT_10000000TESTTEXT_10000001TESTTEXT_10000002 但是,如果我将/ 1和/ 2附加到我的行,则排序
如果我创建包含以下行的文本文件:
>TESTTEXT_10000000
>TESTTEXT_1000000
>TESTTEXT_10000002
>TESTTEXT_10000001

并执行sort myfile,我的输出是

>TESTTEXT_1000000
>TESTTEXT_10000000
>TESTTEXT_10000001
>TESTTEXT_10000002

但是,如果我将/ 1和/ 2附加到我的行,则排序输出会发生巨大变化,我不知道为什么.

输入:

>TESTTEXT_10000000/1
>TESTTEXT_1000000/1
>TESTTEXT_10000002/1
>TESTTEXT_10000001/1

输出:

>TESTTEXT_10000000/1
>TESTTEXT_1000000/1
>TESTTEXT_10000001/1
>TESTTEXT_10000002/1

输入:

>TESTTEXT_10000000/2
>TESTTEXT_1000000/2
>TESTTEXT_10000002/2
>TESTTEXT_10000001/2

输出:

>TESTTEXT_10000000/2
>TESTTEXT_10000001/2
>TESTTEXT_1000000/2
>TESTTEXT_10000002/2

正斜线被认为是分离器吗?使用–field-sperator并没有改变行为.如果是这样,为什么在1000002/2和1000002/2条目之间是1000000/2?使用人类排序,数字排序或其他选项从未带来一致性.有人可以帮我从这里出去吗?

:编辑:
因为它似乎是相关的,考虑到答案,这台机器上LC_ALL的值是en_GB.UTF-8

/在您的语言环境中为0之前.使用LC_ALL = C或其他语言环境将不会改变任何内容.

在您的用例中,您可以正确使用-Version排序:

sort -V myfile

您可以选择指定要排序的分隔符和键:

sort -t/ -k1,1 myfile

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读