如何根据其他列值对一列中的值进行排序?

如何根据其他列值对一列中的值进行排序?

我想对给定的制表符分隔的数据进行排序。

  • 第一级是第 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

相关内容