sort命令的回答不一致

时间:2012-08-13 10:07:23

标签: linux bash

我正在使用 sort 按字母顺序对文件的行进行排序,但我得到了一些奇怪的结果。 我以为它是使用字符的十进制代码对它们进行排序,但它看起来不像。即'E'(十进制代码69)位于'e'(十进制代码101)之后,'0'(代码48)位于':'之后(代码58)。
我试着用

if [[ "E" < "e" ]]; then echo "true"; else echo "false"; fi

if [[ "0" < ":" ]]; then echo "true"; else echo "false"; fi

检查它是否给了我正确的答案,但事实并非如此。 我正在研究ubuntu 12.04,我的环境编码和我想要排序的文件被定义为en_us.UTF-8。

问题是我必须在java程序中解析这些文件,假设这些行按字母顺序排序。因此,当java根据字符的十进制代码比较字符串时,我的解析失败,因为文件中的行没有按照相同的顺序排序。

有人可以通过强制 sort 来使用十进制代码来帮助我解决这个问题,或者使用其他方法根据此顺序对文件进行排序。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

手册中

警告

   *** 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 input.txt 
0
:
E
e

$是shell提示符)