Eu tenho arquivos que foram gerados por um programa que não colocou novas linhas no final dos registros. Quero colocar novas linhas entre os registros e posso fazê-lo com um simples script sed:
sed -e 's/}{/}\n{/g'
O problema é que os arquivos de entrada têm vários gigabytes de tamanho e, portanto, as linhas de entrada para sed têm vários GBs de comprimento. sed tenta manter uma linha na memória, o que não funciona nesse caso. Tentei a --unbuffered
opção, mas isso pareceu torná-la mais lenta e não permitiu que ela terminasse corretamente.
tr
a traduzir }
em \n
e, em seguida, usar sed
para adicionar um }
no final de cada linha? Assim:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{
repetido até que vários gigabytes sejam suficientes.
dd if=file cbs=80 conv=unblock
faria - mas raramente é tão simples assim.