Você pode usar o awk:
awk '!x[$1]++ { print $1 }' file
Estou fazendo uma classificação com o comando uniq -d
. não está me obtendo os resultados desejados.
Meu arquivo é como:
>TCONS_00000066 174 206 33
>TCONS_00000066 210 281 72
>TCONS_00000066 227 316 90
>TCONS_00000066 285 338 54
>TCONS_00000066 335 373 39
>TCONS_00000066 342 377 36
>TCONS_00006042 493 552 60
>TCONS_00006042 562 606 45
>TCONS_00006042 630 686 57
>TCONS_00006042 622 699 78
>TCONS_00006042 614 724 111
>TCONS_00006042 696 767 72
Eu quero remover duplicatas na coluna 1
saída:
>TCONS_00000066
>TCONS_00006042
mas recebo um arquivo em branco toda vez que faço
uniq -d file > newfile
existe alguma outra maneira?
uniq -d
lista apenas linhas duplicadas de sua entrada; já que o seu arquivo não contém linhas duplicadas (consideradas em sua totalidade), não produz nada.
Para obter o resultado desejado, você precisa extrair a primeira coluna e filtrar:
cut -d\ -f1 file | uniq
assumindo que seu arquivo está classificado ( uniq
apenas filtra linhas adjacentes duplicadas); caso contrário
cut -d\ -f1 file | sort -u
Ou você pode fazê-lo com awk
como apontado por taliezin , com uma pequena variante para apenas saída da primeira coluna:
awk '!x[$1]++ { print $1 }' file
A Uniq não classifica e não tira o resto da linha. uniq -d
mostra apenas linhas duplicadas, o que não é o mesmo que mostrar cada linha uma vez (ou seja, com -d
tem que estar lá duas vezes e consecutivamente para ser mostrado)
Primeiro, corte as colunas não interessantes, depois classifique e localize os elementos exclusivos:
cut -d ' ' -f 1 your_file | sort | uniq
Tags text-processing