remove linhas com palavras duplicadas

1

Eu tenho um arquivo classificado com linhas como esta

word1  abca
word1  abcb
word1  abcc
word2  abca
word2  abcb
word3  abbb
...........

e eu quero ter algo parecido com isso

word1  abca
word2  abca
word3  abbb
...........
    
por anon123 07.06.2014 / 11:13

3 respostas

3

Este encantamento mágico é um famoso idioma awk:

awk '!seen[$1]++' file

Na primeira vez que uma linha com esse $ 1 é vista, a linha é impressa.

    
por 07.06.2014 / 13:56
1

Uma solução awk - usando uma variável para detectar uma nova palavra. Se uma nova palavra for encontrada, imprima a linha e atribua a variável à palavra atual.

Como o arquivo de dados é classificado, somente a primeira ocorrência de cada palavra imprimirá o registro.

   awk 'BEGIN{w=""} w!=$1 {print;w=$1}' your-file
    
por 07.06.2014 / 11:27
0

Você também pode usar o sinal -w de uniq , que informa apenas os primeiros N caracteres. Os detalhes de se isso funcionará para você dependem dos dados reais, mas se os comprimentos das palavras estiverem definidos ou limitados, isso deve funcionar:

$ sort file.txt | uniq -w 5
word1  abca
word2  abca
word3  abbb

Alternativamente, inverta a ordem dos campos e use uniq -f 1 para pular a comparação do primeiro campo:

$ awk '{print $2,$1}' file.txt | uniq -f 1 | awk '{print $2,$1}'
word1 abca
word2 abca
word3 abbb

Ou obtenha os primeiros campos e, em seguida, grep para eles, limitando a pesquisa à primeira correspondência:

$ for i in $(awk '{print $1}' file.txt | sort -u); do grep -m 1 $i file.txt; done
word1  abca
word2  abca
word3  abbb

E, para fins de conclusão, um Perl:

$ perl -ane 'print if $k{$F[0]}++<1' file.txt 
word1  abca
word2  abca
word3  abbb
    
por 07.06.2014 / 15:21

Tags