Unix排序字母数字字符和':','/'组合的关键

时间:2010-11-04 02:36:47

标签: unix sorting

我正在尝试根据ASCII代码使用UNIX sort命令(GNU 5.97或7.4)对文本文件进行排序。文件中的行有一列,用作排序中的键。

chr1:110170896:NM_004037:0:1:0/1
chr1:110170897:NM_004037:0:1:0/1
chr11:10325325:chr11:0:1:0/1
chr11::0325325:chr11:0:1:0/1

:的ascii代码为58,1为49.但是,当我使用sort -k 1,1 temp.txt对文件进行排序时,输出就是这样,

chr11::0325325:chr11:0:1:0/1
chr1:110170896:NM_004037:0:1:0/1
chr1:110170897:NM_004037:0:1:0/1
chr11:10325325:chr11:0:1:0/1

从结果中,我不知道排序如何决定1:之间的顺序。如果有任何固定订单,则应将第一行和第四行放在一起。

理想情况下,我希望根据ASCII码将键从左侧字符排序到右侧字符。

3 个答案:

答案 0 :(得分:3)

怎么样

 sort -t : -k 1 filename

使用:作为字段分隔符

答案 1 :(得分:3)

从GNU sort的手册页:

  

*警告* 环境指定的区域设置会影响排序顺序。设置LC_ALL = C以获取使用本机字节值的传统排序顺序。

在我的机器上使用LC_ALL=C sort text(其中text是我复制样本数据的文件)会给出您想要的排序顺序。

仍然没有解释为什么chr11在原始例子中没有排在一起虽然......

答案 2 :(得分:2)

sort区分敏感。它将受您的区域设置的影响。

您应该尝试将语言设置为C以返回ASCII顺序。

假设将其作为LANG=C sort -k 1,1 temp.txt运行或设置环境变量

如果您需要对错误订单进行解释,最好让您的locale / LANG环境挖掘出原因。