it-swarm-es.tech

Difundir dos grandes archivos de texto

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.

34
jonasl

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.

47
Richm

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.

5
Karl