如何使用AWK来唯一一个表(保留每个唯一ID的最大值)?

时间:2014-01-09 23:36:31

标签: linux bash awk

我有一个像这样的TAB分隔表(第一行是标题):

  symbol    value   chr start   end
  Arrb1 10  chr1    1000    2000
  Arrb1 20  chr1    1000    2000
  Arrb1 30  chr1    1000    2000
  Myc   5   chr2    3000    4000
  Actin 3   chr4    25000   30000
  Actin 5   chr4    25000   30000
    .
    .
    .

我想通过第一列(符号)使表格唯一,如果同一符号有多行,则保持该行具有最大值(第2列)。所以结果应该是这样的:

  symbol    value   chr start   end
  Arrb1 30  chr1    1000    2000
  Myc   5   chr2    3000    4000
  Actin 5   chr4    25000   30000
    .
    .
    .

我可以使用AWK吗?谢谢!

2 个答案:

答案 0 :(得分:1)

awk -F'\t' 'NR==1{print}
 NR>1{if(b[$1]<$2){ a[$1]=$0; b[$1]=$2 }}
 END{for(x in a)print a[x]}' file

答案 1 :(得分:1)

如果没有标题。我提供的是较短的一个。

sort -k1,1 -k2,2nr file |awk '!a[$1]++'