Un enorme archivo de texto (hasta 2 GiB) contiene aproximadamente 100 duplicados exactos de cada línea (inútil en mi caso, ya que el archivo es una tabla de datos similar a CSV).
Lo que necesito es eliminar todas las repeticiones mientras (preferiblemente, pero esto se puede sacrificar por un aumento significativo del rendimiento) mantener el orden de secuencia original. En el resultado, cada línea debe ser única. Si hubiera 100 líneas iguales (generalmente los duplicados se extienden por el archivo y no serán vecinos), solo quedará uno del tipo.
He escrito un programa en Scala (considérelo Java si no sabe sobre Scala) para implementar esto. ¿Pero tal vez hay herramientas nativas escritas en C más rápidas capaces de hacerlo más rápido?
ACTUALIZACIÓN: la awk '!seen[$0]++' filename
solución parecía funcionar bien para mí, siempre y cuando los archivos estuvieran cerca de 2 GiB o menos, pero ahora que tengo que limpiar un archivo de 8 GiB ya no funciona. Parece tener infinito en una Mac con 4 GiB RAM y una PC con Windows 7 de 64 bits con 4 GiB RAM y 6 GiB swap simplemente se queda sin memoria. Y no me entusiasma probarlo en Linux con 4 GiB RAM dada esta experiencia.
sort -u
probablemente será más rápido.