Comando Linux para remover as linhas duplicadas, mas manter a primeira ocorrência

1

Eu tenho um arquivo de texto. Cada linha contém uma string. Algumas cordas são repetidas. Eu quero remover a repetição, mas quero manter a primeira ocorrência. Por exemplo:

line1
line1
line2
line3
line4
line3
line5

deve ser

line1
line2
line3
line4
line5

Eu tentei: sort file1 | uniq -u > file2 , mas isso não ajudou. Ele removeu todas as sequências repetidas enquanto eu quero que a primeira ocorrência esteja presente. Eu não preciso classificar. Basta remover a repetição exata de uma string em uma nova linha, mantendo todo o resto como está.

    
por user9371654 05.06.2018 / 11:53

2 respostas

2

Se você permitir a classificação de qualquer maneira, isso funcionará:

sort | uniq

-u foi a fonte do seu problema, porque (de man 1 uniq ):

-u, --unique
only print unique lines

enquanto por padrão:

With no options, matching lines are merged to the first occurrence.

    
por 05.06.2018 / 12:17
0

Utilitários especializados que imprimem linhas exclusivas sem classificação:

  1. uq .

  2. unique .

Veja também: Como obter apenas os resultados exclusivos sem precisar classificar os dados? e Unix: remover linhas duplicadas sem ordenar .

    
por 06.06.2018 / 11:19