我想对给定的制表符分隔的数据进行排序。
- 第一级是第 1 列,按升序排序
- 第二级是第 2 列也按升序排序(但有条件); 健康)状况:第 3 列应按唯一值分组,但第 2 列中的排序顺序也应尽可能保留(最小范围位于顶部)。
- 第 3 列根本没有排序,但应该进行分组。
输入数据:
2 15881764 9 C|T
2 15881767 9 C|C
2 15881989 4 C|C
2 15882091 4 G|T
2 15882451 9 C|T
2 15882454 9 C|T
2 15882493 9 C|T
2 15882505 6 A|T
3 16882450 6 C|T
3 16882594 6 C|T
3 16882633 6 C|T
3 16882755 6 A|T
预期输出:
2 15881764 9 C|T
2 15881767 9 C|C
2 15882451 9 C|T
2 15882454 9 C|T
2 15882493 9 C|T
2 15881989 4 C|C
2 15882091 4 G|T
2 15882505 6 A|T
3 16882450 6 C|T
3 16882594 6 C|T
3 16882633 6 C|T
3 16882755 6 A|T
任何基于 UNIX 的实用程序都可以,但由于可读性,排序和 awk 更可取。
答案1
sort -k1,1n -k3,3n -k2,2n file
首先按第 1 列数字排序。
如果存在平局,则按第 3 栏的数字排序。
如果存在平局,则按第 2 栏的数字排序。
答案2
sort
我认为如果你在第三个字段上做一个,你的问题就解决了,只是sort -n -k3
为了你能做的最好的事情
sort -t$'\t' -n -k3 -k2 -k1 file
如果你看一下man
页的sort
您会看到-k
表示每行中默认由要排序的空格分隔的字段。该-t
标志允许您根据您上次编辑的字符来设置分隔符Tab 。