意外的bash排序行为

时间:2016-11-01 13:39:59

标签: bash sorting

如果我创建包含以下行的文本文件:

drawableLeft

并执行>TESTTEXT_10000000 >TESTTEXT_1000000 >TESTTEXT_10000002 >TESTTEXT_10000001 ,我的输出是

sort myfile

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

输入:

>TESTTEXT_1000000
>TESTTEXT_10000000
>TESTTEXT_10000001
>TESTTEXT_10000002

输出:

>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

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

:编辑: 因为它似乎是相关的,考虑到答案,这台机器上LC_ALL的值是>TESTTEXT_10000000/2 >TESTTEXT_10000001/2 >TESTTEXT_1000000/2 >TESTTEXT_10000002/2

1 个答案:

答案 0 :(得分:3)

/位于您的语言区域中的0之前。使用LC_ALL=C或其他语言环境将不会改变任何内容。

在您的使用案例中,您可以正确使用-V版本:

sort -V myfile

备选方案是否可以指定要排序的分隔符和键:

sort -t/ -k1,1 myfile