2017-02-07 2 views
0

у меня есть файл, который выглядит следующим образом:Удаление повторяющихся строк с разными колоннами

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 
+0

при использовании '-u' с' -t: -k1,1', что происходит? Удачи. – shellter

ответ

1

вы можете использовать awk и or оператора, если порядок не является обязательным

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 

Edit, только 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 
Смежные вопросы