我的文件是由没有在记录末尾放置换行符的程序生成的。我想在记录之间添加换行符,我可以用一个简单的 sed 脚本来做到这一点:
sed -e 's/}{/}\n{/g'
Run Code Online (Sandbox Code Playgroud)
问题在于输入文件的大小为数 GB,因此 sed 的输入行的长度为数 GB。sed 尝试在内存中保留一行,在这种情况下不起作用。我尝试了该--unbuffered
选项,但这似乎使它变慢并且无法正确完成。
您可以使用其他工具来设置输入记录分隔符。例如
珀尔
perl -pe 'BEGIN{ $/="}{" } s/}{/}\n{/g' file
Run Code Online (Sandbox Code Playgroud)
特殊变量$/
是输入记录分隔符。将其设置为}{
将行定义为以}{
. 这样您就可以实现您想要的,而无需将整个内容读入内存。
mawk 或 gawk
awk -v RS="}{" -vORS= 'NR > 1 {print "}\n{"}; {print}' file
Run Code Online (Sandbox Code Playgroud)
这是同样的想法。RS="}{"
将记录分隔符设置为}{
,然后打印}
一个换行符{
(第一条记录除外)和当前记录。