Como podemos remover uma linha duplicada sem ordenar?

1

Eu quero remover linhas duplicadas sem classificar linhas. Também quero ignorar o espaço em branco inicial.

cat test.txt

 abc 

  def

pqr

      abc        

    xyz

             def 

    efg

a saída deve ser

abc

def

pqr

xyz

efg
    
por user2866747 24.04.2014 / 15:10

3 respostas

3

Tente isto:

$ awk 'NF && !($1 in a){a[$1];p=$1;print (getline == 0) ? p : p"\n"}' cat
abc

def

pqr

xyz

efg

Explicação

  • NF && !($1 in a) : só processamos linha que não é linha em branco e o valor ainda não apareceu no array associativo a .
  • a[$1] : se o valor não aparecer, nós o salvamos no array associativo a .
  • p=$1;print (getline == 0) ? $1 : p"\n" : salvamos o valor na variável p . Se não for o final do arquivo, a variável de impressão p segue uma nova linha, se no final do arquivo, apenas imprima p valor.
por 24.04.2014 / 16:32
1

Este comando deve funcionar.

awk '{$1=$1}1' filename | awk ' !x[$0]++'

O primeiro comando awk remove todos os espaços em branco iniciais em seu arquivo e o segundo comando awk apenas imprime elementos exclusivos.

    
por 24.04.2014 / 15:37
1

Se você quiser remover duplicatas todas (incluindo linhas vazias duplicadas)

awk '{if ($1 in a) next; a[$1]=$0; print}' test.txt

Se você quiser reter linhas vazias duplicadas

awk '/^$/ {print; next} {if ($1 in a) next; a[$1]=$0; print}' test.txt
    
por 24.04.2014 / 15:48

Tags