sort命令的错误行为?
我试图在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
您可以使用LC_ALL
变量,在调用sort
之前将其设置为LC_ALL=C
$ 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时,按字节顺序对比较符号。 否则sort
将忽略所有非字母数字字符。
排序使用字母和数字排序,与我们相同,忽略特殊字符,如+ – <> …,数字处理数字,因此1,2,3 ..在11,12,1066 1104之前 – 见!
因此,您的列表被视为:aa,ab,ab,ac,ac