Ich habe Dateien, die von einem Programm generiert wurden, das keine Zeilenumbrüche am Ende von Datensätzen gesetzt hat. Ich möchte Zeilenumbrüche zwischen die Datensätze setzen, und ich kann dies mit einem einfachen sed-Skript tun:
sed -e 's/}{/}\n{/g'
Das Problem ist, dass die Eingabedateien mehrere Gigabyte groß sind und daher die zu sedierenden Eingabezeilen mehrere GB lang sind. sed versucht, eine Zeile im Speicher zu halten, was in diesem Fall nicht funktioniert. Ich habe die --unbufferedOption ausprobiert , aber das schien sie nur langsamer zu machen und erlaubte nicht, dass sie richtig beendet wurde.
trzu übersetzen }in \nund verwenden Sie dann sedein hinzuzufügen }jede Zeile am Ende? So:tr '}' '\n' < your_file.txt| sed 's/$/}/'
printf "\n" >> file
}{Wiederholung, bis sie mehrere Gigabyte lang ist, ausreichen würde.
dd if=file cbs=80 conv=unblockwürde es das tun - aber es ist selten so einfach.