Eliminar entradas duplicadas de un archivo CSV

13

Tengo un archivo [csv] con datos duplicados reimpresos, es decir, los mismos datos impresos dos veces. Intenté usar sort's uniq por, sort myfile.csv | uniq -usin embargo, no hay cambios en el myfile.csv, también lo he intentado sudo sort myfile.csv | uniq -upero no hay diferencia.

Así que actualmente mi archivo csv se ve así

a
a
a
b
b
c
c
c
c
c

Me gustaría lucir así

a
b
c
3kstc
fuente
sort -u myfile.csv> tmp.csv; mv -f tmp.csv myfile.csv
Archemar
de acuerdo con man sort, no se puede ordenar "en el lugar".
Archemar
También puede intentar no confiar en el terminal. Puede probar esta herramienta en línea en su
Aminah Nuraini

Respuestas:

16

La razón por la myfile.csvque no está cambiando es porque la -uopción para uniqserá solamente imprimir líneas únicas. En este archivo, todas las líneas son duplicadas, por lo que no se imprimirán.

Sin embargo, lo que es más importante, la salida no se guardará myfile.csvporque uniqsolo la imprimirá stdout(de forma predeterminada, su consola).

Tendría que hacer algo como esto:

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

Las opciones significan:

  • -u - mantener solo líneas únicas
  • -o - salida a este archivo en lugar de stdout

Debería ver man sortpara más información.

Belmin Fernandez
fuente
3

Como mostró Belmin, la clasificación es genial. Su respuesta es mejor para datos sin clasificar, y es fácil de recordar y usar.

Sin embargo, también es volátil, ya que cambia el orden de la entrada. Si realmente necesita que los datos pasen en el mismo orden pero eliminando los duplicados posteriores, awk puede ser mejor.

$ 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 extraño, pero surge de vez en cuando.

Además, si sus datos ya están ordenados cuando los está hurgando, puede ejecutar uniq.

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


$ uniq myfile.csv 
a
b
c

El inconveniente de mis dos sugerencias es que necesita usar un archivo temporal y copiarlo nuevamente.

Falsenames
fuente
2

Uniq -u solo imprime líneas únicas. Su entrada no tiene líneas únicas, así que uniq -uno imprima nada. Solo necesitas sort:

sort -u myfile.csv
Cuonglm
fuente
2

Si desea mantener el orden del archivo (no ordenado) pero aún así eliminar duplicados, también puede hacerlo

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

Por ejemplo

d
d
a
a
b
b
c
c
c
c
c

Saldrá

d
a
b
c
NinjaGaiden
fuente
¿Podría por favor ampliar la sintaxis?
Sopalajo de Arrierez
Coloque la cadena en un hash. Si la cadena NO existe en el hash, imprima.
NinjaGaiden