保持第一列的scaffold的先后顺序不变,第二列在同一条scaffold的情况,按数字大小排序。
Ph_scaffold57_2 6002125
Ph_scaffold57_2 1826520
Ph_scaffold4 54818110
Ph_scaffold4 53507591
Ph_scaffold4 51550443
Ph_scaffold4 15513112
Ph_scaffold243 767655
结果是:
Ph_scaffold57_2 1826520
Ph_scaffold57_2 6002125
Ph_scaffold4 15513112
Ph_scaffold4 51550443
Ph_scaffold4 53507591
Ph_scaffold4 54818110
Ph_scaffold243 767655
- awk 'NR>1&&i!=$1{for(j=0;j++<asorti(a,b);)print i,b[j];delete a}{i=$1;a[$2]}' file <(echo)
[解析] 一开始我以为是个蛮小的问题, sort应该就可以解决, 不就是一个排序嘛. 后来发现sort无法在第一列相同且不改变先后顺序的情况下针对第二列排序, sort要么连第一列都排序了, 这样就打乱了原先的自然顺序.
既然原先考虑的方法不行, 就只有用awk了, 思路是分别针对每个相同的第一列进行排序, 目的是为了不改变其自然顺序, 把相同第一列的第二列的值放入数组a中, 当发现第一列不相同时, 就排序输出, 清空数组a.
阅读(8161) | 评论(1) | 转发(3) |