У меня есть файлы, которые были сгенерированы программой, которая не ставила переводы строк в конце записей. Я хочу поместить новые строки между записями, и я могу сделать это с помощью простого сценария sed:
sed -e 's/}{/}\n{/g'
Проблема заключается в том, что входные файлы имеют размер в несколько гигабайт, и поэтому строки ввода для sed имеют длину в несколько ГБ. sed пытается удерживать строку в памяти, которая в этом случае не работает. Я попробовал --unbufferedвариант, но это, казалось, замедляло его и не позволяло закончить правильно.
trдля перевода }в \nи затем использовать, sedчтобы добавить }в конце каждой строки? Как это:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{повторения, пока его длины не станет несколько гигабайт, будет достаточно.
dd if=file cbs=80 conv=unblockсделал бы это - но это редко бывает так просто.