关于第一列按染色体排序,第二列按照数值升序排序我踩的坑,
真的是对自己十分的无语啊,比如如下文件
正解方法为👇
sort -k1,1V -k2,2n input.txt > output.txt
-k1,1 对第一列的第一个字符到最后一个字符进行排序[其实就是对第一列进行排序,但这个理解很重要]
-V, --version-sort natural sort of (version) numbers within text
十分的强大和好用,意思是给文本中的数字进行排序,有些以前的sort版本可能没有这个参数,建议升级。因为这个参数用上,再也不用担心因为文本中有数字而排序导致变成ASCII顺序,也不用需要特地编辑Chr1变成Chr01这类。
其中注意两点:
1
sort 参数 -k 的语法格式
F[.C][OPTS][,F[.C][OPTS]]
上述和以前的sort语法结构是一个意思
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
一定要注意区别 点"." 和 逗号 “,” 是各有用处的!
如1.3 代表从第一列的第三个字符开始排序
1,1 上面解释过了。来自其他博客的警告👇
“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。
已经解释得很清楚了,但是我还是踩了坑,因为没有设置end,
比如这个,对上述图片的内容进行排序
第一列按染色体排序,第二列按照数值升序
sort -k 1 -k 2n file.txt > ceshi1.txt
看起来这个代码没有问题,但是因为 -k 1 没设end,导致出现“第一列能正常排序,第二列怎么不按数值排序,还是默认的排序方法呢??”的人生疑问。如果你用这个代码没有哦问题当我没说。。
2
对自己也是对他人的忠告
对一个linux常用的命令还是得多注意细节,得吃透,比如 sed awk grep sort cat cp cut less等等等等,而且得注意版本,更新一个版本,可能有了新的好用的参数,也可能使用命令和以前的有所差别。总之,在借助网上教程的便利前提下,也得时刻警醒自己,教程不是一成不变的,用的参数、版本都需要注意。