tengo dos archivos muy grandes (y ninguno de ellos caben en la memoria). Cada archivo tiene una cadena (que no tiene espacios y tiene 99/100/101 caracteres de longitud) en cada línea.¿Cómo encontrar cadenas comunes entre dos archivos muy grandes?
Actualización: Las cadenas no se encuentran ordenadas.
Update2: Estoy trabajando con Java en Windows.
Ahora quiero averiguar la mejor manera para descubrir todas las cadenas que ocurren en ambos archivos.
He estado pensando en usar el tipo de combinación externa para ordenar ambos archivos y luego hacer una comparación, pero no estoy seguro de si esa sería la mejor manera de hacerlo. Como las cuerdas son casi del mismo largo, siempre me pregunté si sería una buena idea calcular algún tipo de hash para cada cuerda, ya que eso debería facilitar las comparaciones entre cadenas, pero eso significaría que tengo que almacenar los hash. calculado para las cadenas que he encontrado desde los archivos hasta el momento para que puedan usarse más adelante al compararlas con otras cadenas. No puedo precisar cuál sería exactamente la mejor manera. Estoy buscando tus sugerencias.
Cuando sugiera una solución, también indique si la solución funcionaría si hubiera más de 2 archivos y cadenas que ocurrieran en todos ellos.
Y en el caso de que usted está en una Plataforma Windows, la simplicidad de esta solución es tan grande que probablemente valga la pena encontrar una caja Unix o instalar cygwin. Esta es también la forma en que resolvería esto. –
Esto no indica qué cadenas son las que se repiten en todos los archivos, pero muestra la unión establecida de todos los archivos. – Seb
uniq -d elimina las líneas que ocurren solo y solo imprime una sola copia de las líneas duplicadas. –