我正在对具有基因名称及其表达值的文件进行排序。所有文件都具有相同的确切行数,但是排序后某些基因的位置存在差异。这很奇怪。下面是两个此类文件的排序版本。
例如:
Cxx1c 25.1695
Cxxc1 15.2228
Cxxc4 0.952061
Cxxc5 3.13309
**Cyb5 157.426**
Cyb561 0.425933
Cyb561a3 9.55082
Cyb561d1 4.00422
Cyb561d2 3.04411
Cyb5b 16.7622
Cyb5d1 7.25191
Cyb5d2 2.85109
Cyb5r1 15.2511
Cyb5r2 0.48748
另一个文件有这种排序。基本上,在此文件中,Cyb5 存在于 Cyb561d2 基因之后。我怎样才能有完全相同的排序顺序。有没有任何参数可以做这样的事情?
Cxx1c 44.9795
Cxxc1 19.0346
Cxxc4 1.17429
Cxxc5 2.71589
**Cyb561 7.11003**
Cyb561a3 1.97601
Cyb561d1 2.13004
Cyb561d2 2.03376
Cyb5 64.074
Cyb5b 14.5329
Cyb5d1 12.0212
Cyb5d2 1.47763
Cyb5r1 10.5463
Cyb5r2 0
这是我生成上述排序文件的代码:
for i in *.txt; do
sort -d $i >$i.sort
done
答案1
Cyb5 157.426
排序在前,Cyb561 0.425933
而Cyb5 64.074
排序在后,Cyb561 7.11003
因为在您的语言环境中,第一次排序过程中会忽略空格,因此顺序更接近英语词典的顺序。
例如,在字典中,您可以在和a priori
之间找到。apiary
Arrival
这里,比较Cyb5 157.426
与在第一遍中Cyb561 0.425933
比较第一个Cyb5157.426
与因为第一个Cyb5610.425933
重量空格字符是忽略。
如果您想避免这种特殊处理,可以将区域设置更改为C
仅基于字符代码点值的顺序。
LC_ALL=C sort -d file
或者正如@Swiss所说,仅对第一个字段进行排序:
sort -d -k1,1 file
但请注意,字段分隔符是从非空白到空白的过渡,并且空白是包含在字段中。
所以:
b x
a x
withsort -d -k1,1
仍会排序为
a x
b x
在您的语言环境中,因为空格被忽略,但如下所示:
b x
a x
在 C 语言环境中,空格字符排在前面a
。
您可能需要添加该-b
选项,以便无论区域设置如何,始终忽略前导空格。或者,如果您确实希望首先对以空格开头的行进行排序,请将区域设置修复为 C。
答案2
您当前正在对整行进行排序,但似乎您只想对第一列进行排序。按照当前编写命令的方式,这些列基本上将连接在一起,例如:
Cyb5 157.426 -> Cyb5157426
Cyb561 0.425933 -> Cyb5610425933
与
Cyb561 7.11003 -> Cyb561711003
Cyb5 64.074 -> Cyb564074
要仅对第一列进行排序,您需要使用以下命令:
sort -d -k1,1