text-processing – Reemplace la cadena en un archivo de texto enorme (70 GB), de una línea

Pregunta:

Tengo un archivo de texto enorme (70 GB), de una línea , y quiero reemplazar una cadena (token) en él. Quiero reemplazar el token <unk> , con otro (token maniquí cuestión guante ).

sed :

sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new

¡pero el archivo de salida corpus.txt.new tiene cero bytes!

También intenté usar perl:

perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new

pero tengo un error de memoria insuficiente.

Para archivos más pequeños, ambos comandos anteriores funcionan.

¿Cómo puedo reemplazar una cadena en un archivo de este tipo? Esta es una pregunta relacionada, pero ninguna de las respuestas me funcionó.

Editar : ¿Qué hay de dividir el archivo en trozos de 10 GB (o lo que sea) cada uno y aplicar sed en cada uno de ellos y luego fusionarlos con cat ? ¿Tiene sentido? ¿Existe una solución más elegante?

Respuesta:

Para un archivo tan grande, una posibilidad es Flex. Sea unk.l :

%%
\<unk\>     printf("<raw_unk>");  
%%

Luego compila y ejecuta:

$ flex -o unk.c  unk.l
$ cc -o unk -O2 unk.c -lfl
$ unk < corpus.txt > corpus.txt.new

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım