删除包含不同列的重复行

时间:2017-02-07 13:51:35

标签: shell awk duplicates rows

我有一个如下文件:

  ENSG00000197111:I12 0
  ENSG00000197111:I12 1
 ENSG00000197111:I13 0
 ENSG00000197111:I18 0
 ENSG00000197111:I2 0
 ENSG00000197111:I3 0
 ENSG00000197111:I4 0
 ENSG00000197111:I5 0
 ENSG00000197111:I5 1

我有一些重复的行,但我无法通过排序-u删除,因为第二列具有不同的值(1或0)。如何通过将第二列的行保持为1来删除此类重复项,以使文件为

 ENSG00000197111:I12 1
 ENSG00000197111:I13 0
 ENSG00000197111:I18 0
 ENSG00000197111:I2 0
 ENSG00000197111:I3 0
 ENSG00000197111:I4 0
 ENSG00000197111:I5 1

1 个答案:

答案 0 :(得分:1)

如果订单不是强制性的,您可以使用awkor运算符

awk '{d[$1]=d[$1] || $2}END{for(k in d) print k, d[k]}' file

你得到了

ENSG00000197111:I2 0
ENSG00000197111:I3 0
ENSG00000197111:I4 0
ENSG00000197111:I5 1
ENSG00000197111:I12 1
ENSG00000197111:I13 0
ENSG00000197111:I18 0

修改,仅sort解决方案

你可以sort使用双遍,例如

sort -k1,1 -k2,2r file | sort -u -k1,1

你明白了,

ENSG00000197111:I12 1
ENSG00000197111:I13 0
ENSG00000197111:I18 0
ENSG00000197111:I2 0
ENSG00000197111:I3 0
ENSG00000197111:I4 0
ENSG00000197111:I5 1