J'ai des fichiers qui ont été générés par un programme qui n'a pas mis de nouvelles lignes à la fin des enregistrements. Je veux mettre des retours à la ligne entre les enregistrements, et je peux le faire avec un simple script sed:
sed -e 's/}{/}\n{/g'
Le problème est que les fichiers d'entrée ont une taille de plusieurs gigaoctets, et donc les lignes d'entrée à sed ont une longueur de plusieurs Go. sed essaie de garder une ligne en mémoire, ce qui ne fonctionne pas dans ce cas. J'ai essayé l' --unbuffered
option, mais cela semblait simplement la ralentir et ne lui permettait pas de se terminer correctement.
tr
pour traduire }
en \n
puis utiliser sed
pour ajouter un }
à la fin de chaque ligne? Comme ceci:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{
répétition jusqu'à ce qu'il soit de plusieurs gigaoctets suffirait.
dd if=file cbs=80 conv=unblock
serait le cas - mais c'est rarement aussi simple.