Tengo dos archivos grandes (6 GB cada uno). No están clasificados, con saltos de línea (\n
) como separadores. ¿Cómo puedo diferenciarlos? Debería tomar menos de 24h.
La respuesta más obvia es usar el comando diff y probablemente sea una buena idea agregarle el parámetro --speed-large-files.
diff --speed-large-files a.file b.file
Menciona archivos sin clasificar, por lo que tal vez necesite ordenarlos primero
sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted
puede guardar la creación de un archivo de salida adicional canalizando la salida de la segunda clase directamente en diff
sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -
Obviamente, estos funcionarán mejor en un sistema con mucha memoria disponible y es probable que también necesite mucho espacio libre en el disco.
No quedó claro a partir de su pregunta si ha probado esto antes. Si es así, sería útil saber qué salió mal (tardó demasiado, etc.). Siempre he descubierto que los comandos stock sort y diff tienden a funcionar al menos tan bien como los comandos personalizados, a menos que haya algunas propiedades específicas de dominio de los archivos que permitan hacer las cosas de manera diferente.
Ordenar las entradas y decirle al programa diff
que sus entradas están ordenadas proporcionaría una velocidad masiva. No conozco ningún diff
con una opción como esa, pero comm
supone una entrada ordenada y será mucho más rápido si hace lo suficiente para sus propósitos.