Tôi có các tệp được tạo bởi một chương trình không đặt dòng mới ở cuối hồ sơ. Tôi muốn đặt dòng mới giữa các bản ghi và tôi có thể làm như vậy với một tập lệnh sed đơn giản:
sed -e 's/}{/}\n{/g'
Vấn đề là các tệp đầu vào có kích thước nhiều gigabyte, và do đó, các dòng đầu vào của sed có độ dài nhiều GB. sed cố giữ một dòng trong bộ nhớ, không hoạt động trong trường hợp này. Tôi đã thử --unbufferedtùy chọn này, nhưng điều đó dường như làm cho nó chậm hơn và không cho phép nó kết thúc chính xác.
trđể dịch }sang \nvà sau đó sử dụng sedđể thêm một }ở cuối mỗi dòng? Như thế này:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{lặp đi lặp lại cho đến khi nó dài vài gigabyte.
dd if=file cbs=80 conv=unblocksẽ làm điều đó - nhưng nó hiếm khi đơn giản như vậy.