Removendo entradas duplicadas no arquivo de texto

0

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?

    
por user106326 18.03.2015 / 10:27

3 respostas

3

Você pode usar o awk:

awk '!x[$1]++ { print $1 }' file
    
por 18.03.2015 / 10:31
3

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
    
por 18.03.2015 / 10:34
3

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
    
por 18.03.2015 / 10:34