我尝试对文件内容进行排序Ubuntu 桌面 14.04(Trusty Tahr)。就我而言,预期结果应该与原始内容相同,但实际结果却不相同。为什么?
# cat test.txt
a++-a
a++-b
a++-c
ab
ac
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c
答案1
您可以使用LC_ALL
变量,LC_ALL=C
在调用之前将其设置为sort
$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac
读这答案,如果你想知道这有什么神奇之处LC_ALL=C
。以下是简短的总结:
C 语言环境是一种特殊的语言环境,意在成为最简单的语言环境。您也可以说,其他语言环境是为人类准备的,而 C 语言环境是为计算机准备的。在 C 语言环境中,字符是单字节,字符集是 ASCII,排序顺序基于字节值。
此外,正如@KenMollerup 指出的那样,引用自man sort
*** WARNING *** The locale specified by the environment affects sort
order. Set LC_ALL=C to get the traditional sort order that uses native
byte values.
因此,当使用 进行排序时LC_ALL=C
,按字节对符号进行排序比较。否则sort
将忽略所有非字母数字字符。
答案2
排序使用字母和数字排序,与我们相同,特殊字符如 + - < > ...将被忽略,数字被视为数字,因此 1、2、3.. 位于 11、12 1066 1104 之前 - 看到了吗!
因此您的列表被视为:aa,ab,ab,ac,ac