Remover entradas duplicadas de um arquivo CSV


13

Eu tenho um arquivo [csv] com dados duplicados reimpressos, ou seja, os mesmos dados impressos duas vezes. Eu tentei usar o uniq de sort, no sort myfile.csv | uniq -uentanto, não há alteração no myfile.csv, também tentei, sudo sort myfile.csv | uniq -umas não houve diferença.

Atualmente, meu arquivo csv se parece com isso

a
a
a
b
b
c
c
c
c
c

Eu gostaria de parecer

a
b
c

classifique -u myfile.csv> tmp.csv; mv -f tmp.csv myfile.csv
Archemar

de acordo com man sort, você não pode classificar "no lugar".
Archemar 12/03

Você também pode tentar não confiar no terminal. Você pode tentar usar essa ferramenta on-line em vez textmechanic.com/text-tools/basic-text-tools/...
Aminah Nuraini

Respostas:


16

A razão da myfile.csvnão está mudando é porque a -uopção para uniqse única imprimir linhas únicas. Neste arquivo, todas as linhas são duplicadas para que não sejam impressas.

No entanto, o mais importante é que a saída não será salva myfile.csvporque uniqserá impressa no stdout(por padrão, no console).

Você precisaria fazer algo assim:

$ sort -u myfile.csv -o myfile.csv

As opções significam:

  • -u - mantenha apenas linhas únicas
  • -o - saída para este arquivo em vez de stdout

Você deve ver man sortpara mais informações.


3

Como Belmin mostrou, o tipo é ótimo. Sua resposta é melhor para dados não classificados e é fácil de lembrar e usar.

No entanto, também é volátil, pois altera a ordem da entrada. Se você precisar absolutamente executar os dados na mesma ordem, mas remover duplicatas posteriores, o awk poderá ser melhor.

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

Caso de margem estranho, mas surge de vez em quando.

Além disso, se seus dados já estiverem classificados quando você estiver cutucando, poderá executar o uniq.

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

A desvantagem de ambas as minhas sugestões é que você precisa usar um arquivo temporário e copiá-lo novamente.


2

O uniq -u imprime apenas linhas exclusivas. Sua entrada não possui linhas exclusivas, portanto, uniq -uimprima nada. Você só precisa de sort:

sort -u myfile.csv

2

Se você deseja manter a ordem do arquivo (não classificada), mas ainda assim remover duplicatas, também pode fazer isso

awk '!v[$1]++' /tmp/file

Por exemplo

d
d
a
a
b
b
c
c
c
c
c

Irá produzir

d
a
b
c

Você poderia expandir a sintaxe?
Sopalajo de Arrierez

Coloque a string em um hash. Se a string NÃO existir no hash, imprima.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.