意外的Bash sort行为

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

cat dog rabbit


它将被视为具有三个行,每行分别包含猫,狗和兔子。
>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-separator没有改变其行为。如果是这样,为什么1000000/2在1000001/2和1000002/2条目之间?使用人类排序、数字排序或其他选项从未带来一致性。有人能帮我解决吗?

:编辑: 因为考虑到答案的相关性,此机器上LC_ALL的值为en_GB.UTF-8


2
尝试这个:LC_ALL=C sort file - user000001
1个回答

3

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

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

sort -V myfile

您可以指定分隔符和排序键:

sort -t/ -k1,1 myfile

奇怪的是,LC_ALL=C 确实解决了我的问题并使排序一致。然而,sort -V 选项也解决了问题,而不需要更改语言环境,因此我会接受这个答案。 - TDierckx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接