ฉันมีไฟล์ที่สร้างขึ้นโดยโปรแกรมที่ไม่ได้ขึ้นบรรทัดใหม่เมื่อสิ้นสุดการบันทึก ฉันต้องการขึ้นบรรทัดใหม่ระหว่างระเบียนและฉันสามารถทำได้ด้วยสคริปต์แบบง่าย:
sed -e 's/}{/}\n{/g'
ปัญหาคือไฟล์อินพุตมีขนาดหลายกิกะไบต์และดังนั้นบรรทัดอินพุตเป็น sed มีความยาวหลาย GB sed พยายามเก็บสายไว้ในหน่วยความจำซึ่งไม่สามารถใช้งานได้ในกรณีนี้ ฉันลองใช้--unbufferedตัวเลือก แต่ดูเหมือนว่าจะทำให้ช้าลงและไม่อนุญาตให้ทำอย่างถูกต้อง
trในการแปล}ลงใน\nและจากนั้นใช้sedเพื่อเพิ่ม}ตอนท้ายของแต่ละเส้น? เช่นนี้:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{ทำซ้ำจนกว่าไฟล์จะมีความยาวหลายกิกะไบต์
dd if=file cbs=80 conv=unblockจะทำเช่นนั้น - แต่มันก็ไม่ง่ายอย่างนั้น