Tengo que ocuparme de archivos de texto sin formato muy grandes (más de 10 gigabytes, sí sé que depende de lo que deberíamos llamar grande), con líneas muy largas.optimización sed (modificación de archivos grandes basada en un conjunto de datos más pequeño)
Mi tarea más reciente implica cierta edición de línea basada en datos de otro archivo.
El archivo de datos (que debe modificarse) contiene 1500000 líneas, cada una de ellas es p. Ej. 800 caracteres de largo. Cada línea es única y contiene solo un número de identidad, cada número de identidad es único)
El archivo modificador es, p. 1800 líneas de longitud, contiene un número de identidad, una cantidad y una fecha que deben modificarse en el archivo de datos.
Acabo de transformar (con Vim Regex) el archivo modificador a sed, pero es muy ineficiente.
Digamos que tengo una línea como esta en el archivo de datos:
(some 500 character)id_number(some 300 character)
Y tengo que modificar los datos en la parte 300 Char.
Basado en el archivo modificador, que llegar a las líneas de sed como este:
/id_number/ s/^\(.\{650\}\).\{20\}/\1CHANGED_AMOUNT_AND_DATA/
Así que tienen 1800 líneas de este tipo.
Pero sé, que incluso en un servidor muy rápido, si hago un
sed -i.bak -f modifier.sed data.file
Es muy lento, ya que tiene que leer cada patrón x cada línea.
¿No hay una forma mejor?
Nota: No soy un programador, nunca había aprendido (en la escuela) sobre algoritmos. Puedo usar awk, sed, una versión desactualizada de perl en el servidor.
Cuál es la versión de Perl? –
perl 5.8.6 i586-linux-thread-multi –
Esa * es * una versión obsoleta perl, pero sospecho que no es tan mala como la gente habría concluido de su nota;) – user55400