Mam pliki, które zostały wygenerowane przez program, który nie umieścił znaku nowej linii na końcu rekordów. Chcę wstawić znaki nowego wiersza między rekordami i mogę to zrobić za pomocą prostego skryptu sed:
sed -e 's/}{/}\n{/g'
Problem polega na tym, że pliki wejściowe mają rozmiar wielu gigabajtów, a zatem linie wejściowe do sed mają wiele GB. sed próbuje utrzymać linię w pamięci, co w tym przypadku nie działa. Wypróbowałem tę --unbufferedopcję, ale wydawało się, że spowalnia ją i nie pozwala poprawnie zakończyć.
trdo przetłumaczenia }na \n, a następnie użyć sed, aby dodać }na końcu każdego wiersza? W ten sposób:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{powtarzane, aż wystarczy kilka gigabajtów.
dd if=file cbs=80 conv=unblock, zrobiłby to - ale rzadko jest to takie proste.