Kayıtların sonuna satırsonu koymayan bir program tarafından oluşturulan dosyalarım var. Kayıtlar arasına satırsonu koymak istiyorum ve bunu basit bir sed komut dosyası ile yapabilirim:
sed -e 's/}{/}\n{/g'
Sorun, girdi dosyalarının boyut olarak birden çok gigabayt olması ve bu nedenle sed için kullanılan giriş satırlarının uzunluğunun birden fazla GB olması. sed, bu durumda çalışmayan bir satırı bellekte tutmaya çalışır. --unbufferedSeçeneği denedim , ancak bu daha yavaş görünüyordu ve düzgün bir şekilde bitmesine izin vermedi.
trçevirmek }içine \nkullanmak ve daha sonra sedbir ekleme }her satırın sonunda? tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{gigabaytlık bir dosya yazmanın birkaç gigabayt uzunluğa kadar tekrarlanmasının ardından olduğunu varsayıyorum .
dd if=file cbs=80 conv=unblockbunu yapardı - ancak nadiren bu kadar basit.