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

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.


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.


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

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

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.