我正在尝试根据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码将键从左侧字符排序到右侧字符。
答案 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环境挖掘出原因。