我是oracle和unix世界的新手并且正在努力解决这个问题。
我在文件中假脱机数据。 sql plus的行大小限制为32767,并且返回的任何大于限制的数据记录都会被包装到nextline中。然后将创建的此文件上载到第三方服务,该服务期望json格式的数据仅在结尾处使用换行符,即在}
之后
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
当在假脱机数据时有自动换行时,在换行的每一行之间插入\n
字符并打破此json数据。
无论如何我只能在\n
之后没有出现这个假脱机文件中的}
之类的控制字符?
我可以使用任何unix命令吗?
任何帮助将不胜感激
TIA
答案 0 :(得分:1)
在不了解您的设置的情况下,一个选项是通过这样的sed脚本来管道文件:
cat input.txt | sed -e ':start; /^{.*]}$/{p;d}; N;s/\n//g; b start;' > output.txt
这基本上如下:
本质上它所做的是读取一行,检查它是否以花括号开头和结尾。如果是,请打印并继续。如果没有,抓住下一行。当然,这假设oracle将始终输出以{和end with}开头的行(即括号之前或之后没有空格)。
答案 1 :(得分:0)
重新关注this answer on a sister site,您在Unix中拥有假脱机文件,可以与awk
一起加入行:
awk '{if (sub(/\]}$/,"")) printf "%s]}\n", $0; else printf "%s", $0}' yourfile.lis
如果您开始使用包含以下内容的文件
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my
cup"}]}
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}
]}
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
...我假装你的输出的第二行和第三行被分成了两个,在早期的}
上有一个分割; awk
调用将输出:
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
{"id":"test","brand":"Disney","variants":[{"pid":"cup","name":"my cup"}]}
您可以将其重定向到新文件。