我有一个带有列(染色体,起点和终点)的染色体数据列表,如下所示:
chr1 6252071 6253740
chr1 6965107 6966070
chr1 6966038 6967016
chr1 7066595 7068694
chr1 7100956 7102296
chr1 7153422 7154635
chr1 7155112 7156181
....
chr2
....
chr10
....
chrX
....
chrY
....
等
我正在尝试使用bash将染色体切片按此顺序排序:
chr10
chr11
chr12
chr13
chr14
chr15
chr16
chr17
chr18
chr19
chr1
chr2
chr3
chr4
chr5
chr6
chr7
chr8
chr9
chrM
chrX
chrY
在第一列中,然后按第二列中的起始位置按数字顺序排列,但sort
的变化似乎没有完成。有任何想法吗?感谢。
答案 0 :(得分:1)
将文件拆分为两个流,分别进行过滤,然后重新组合:
cat <(grep '^chr1[[:digit:]][[:space:]]' <inputfile | sort) \
<(grep -v '^chr1[[:digit:]][[:space:]]' <inputfile | sort) \
>outputfile
答案 1 :(得分:0)
perl -E '
open $f, "<", shift;
say join "",
map {$_->[0]}
sort {length($b->[1]) <=> length($a->[1]) or $a->[1] cmp $b->[1]}
map {[$_, (split)[0]]}
<$f>
' file
首先是open
个文件。
然后它使用Schwartzian变换:从下往上读取下一个命令:
<$f>
map {[$_, (split)[0]}
map {$_->[0]}