我正在尝试使用UNIX sort命令(GNU5.97或7.4)根据ASCII码对文本文件进行排序。文件中的行只有一列,该列用作排序中的键。
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从结果中,我不知道sort如何决定1和:之间的顺序。如果有任何固定的顺序,第一行和第四行应该放在一起。
理想情况下,我希望根据ASCII码从左字符到右字符对键进行排序。
发布于 2010-11-04 10:54:27
怎么样
sort -t : -k 1 filename使用:作为字段分隔符
发布于 2010-11-04 11:04:30
从GNU排序的手册页:
* WARNING *环境指定的区域设置会影响排序顺序。设置LC_ALL=C以获取使用本机字节值的传统排序顺序。
在我的机器上使用LC_ALL=C sort text (其中text是我复制示例数据的文件)可以给出您想要的排序顺序。
仍然没有解释为什么chr11没有在原始示例中排序...
发布于 2010-11-04 11:08:48
sort区分区域设置。它将受到您的区域设置的影响。
您应该尝试将语言设置为C以返回到ASCII码顺序。
假设以LANG=C sort -k 1,1 temp.txt身份运行或设置您的环境变量
如果你需要一个错误顺序的解释,最好给你的locale / LANG环境找出原因。
https://stackoverflow.com/questions/4093443
复制相似问题