Mak*_*Lee 15 command-line sort
我试图在Ubuntu 桌面 14.04 (Trusty Tahr)中对文件的内容进行排序。就我而言,预期结果应该与原始内容相同,但实际结果却并非如此。为什么?
# cat test.txt
a++-a
a++-b
a++-c
ab
ac
Run Code Online (Sandbox Code Playgroud)
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c
Run Code Online (Sandbox Code Playgroud)
c0r*_*0rp 19
您可以使用LC_ALL
变量,LC_ALL=C
在调用之前将其设置为sort
$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac
Run Code Online (Sandbox Code Playgroud)
如果您想神奇地知道这是什么,请阅读此答案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.
Run Code Online (Sandbox Code Playgroud)
因此,当使用 sort with 时LC_ALL=C
,按字节对比较符号进行排序。否则sort
将忽略所有非字母数字字符。
Sort 使用字母和数字排序,与我们一样,像 + - < > ... 这样的特殊字符被忽略,数字被视为数字所以 1, 2, 3.. 排在 11, 12 1066 1104 之前——看!
所以你的列表被视为:aa, ab, ab, ac, ac