Eu tenho um arquivo de texto enorme (70 GB), uma linha , e quero substituir uma string (token) nele. Quero substituir o token <unk>
por outro fictício ( problema de luva ).
Eu tentei sed
:
sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
mas o arquivo de saída corpus.txt.new
possui zero bytes!
Eu também tentei usar perl:
perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
mas recebi um erro de falta de memória.
Para arquivos menores, os dois comandos acima funcionam.
Como posso substituir uma string é um arquivo? Esta é uma pergunta relacionada, mas nenhuma das respostas funcionou para mim.
Editar : Que tal dividir o arquivo em pedaços de 10 GB (ou o que for) cada um e aplicar sed
em cada um deles e depois mesclá-los cat
? Isso faz sentido? Existe uma solução mais elegante?
split
com a -b
opção de definir tamanhos de arquivo de bloco em bytes. Processe cada um por sua vez, usando sed
e remontando. Existe o risco é que <unk>
pode ser dividido em dois arquivos e não será encontrado ...