Tengo un archivo de texto de 250 MB, todo en una línea.
En este archivo quiero reemplazar acaracteres con bcaracteres:
sed -e "s/a/b/g" < one-line-250-mb.txt
Falla con:
sed: couldn't re-allocate memory
Me parece que este tipo de tarea podría realizarse en línea sin asignar mucha memoria.
¿Existe una mejor herramienta para el trabajo o una mejor manera de usarla sed?
GNU sed versión 4.2.1
Ubuntu 12.04.2 LTS
1 GB RAM
text-processing
sed
performance
large-files
out-of-memory
Nicolas Raoul
fuente
fuente

Respuestas:
Sí, use
tren su lugar:sedtrata en líneas, por lo que una línea enorme le causará problemas. Espero que declare una variable internamente para mantener la línea y su entrada excede el tamaño máximo asignado a esa variable.trpor otro lado, trata con caracteres y debería poder manejar líneas largas arbitrariamente correctamente.fuente
sed -e "s/a/z/g" b.txt > c.txtsin ningún problema. Uso de sed (GNU sed) 4.2.2.sedversión, supongo que depende de la implementación o el hardware.sed.Las versiones históricas de sed y awk tenían problemas de memoria, en su mayoría se han solucionado en versiones más recientes, pero uno de los casos clásicos de este problema golpeó bastante a Larry Wall . su respuesta fue escribir un nuevo lenguaje de programación, sin límites de memoria que no sean hardware. Lo llamó perl. su problema específico se puede resolver de manera más simple, pero la regla general que uso es cuando sed no usará perl.
Editar: por solicitud un ejemplo:
o por menos uso de memoria:
fuente
sedAunque un poco decepcionado . : \