我有一个 55MB 的 JSON 文件,其中包含大量由},{
.我想每行有一个对象并去掉逗号。一方面,我希望能够使用编辑器查看该文件,而大多数编辑器不喜欢 55MB 行的文件。我使用了以下sed
命令,但它写出了一个零长度的文件。我怎样才能达到我想要的结果?
cat INPUT | sed -n 's/},{"Foo"/}\n{"Foo"/g' > OUTPUT
答案1
sed 的标志-n
意味着安静。那么自动打印行就被禁用了,你必须用命令显式地打印一行p
。
只需使用您的命令,末尾不带-n
或带:p
sed 's/},{"Foo"/}\n{"Foo"/g' file >output
或者:
sed -n 's/},{"Foo"/}\n{"Foo"/gp' file >output
答案2
由于对象是用逗号分隔的,我假设它们在一个数组中。
如果它们位于一个数组中,并且该数组是顶级数组,如
[{"Foo":"first"},{"Foo":"second"},{"Foo":"third"}]
...那么你可以使用JSON 处理器jq
将外部数组扩展为一组单独的对象,如下所示:
jq -c '.[]' file
根据我之前的示例输入,这将产生以下一组 JSON 对象:
{"Foo":"first"}
{"Foo":"second"}
{"Foo":"third"}
由于这会改变文档的结构,因此您可以使用类似的内容jtc
,另一个 JSON 处理器,其功能允许您漂亮地打印文档,就像jq
默认情况下一样,但以紧凑的形式呈现每个结构的最低级别:
$ jtc -tc file
[
{ "Foo": "first" },
{ "Foo": "second" },
{ "Foo": "third" }
]
由于您似乎主要想从视觉上探索该文档,因此您可能也对jless
公用事业,这是一种“JSON 浏览器”。它将显示文档的结构以及(交互式)可折叠子结构:
▽ [{…}, {…}, {…}]
▽ [0]: {Foo: "first"}
Foo: "first"
▽ [1]: {Foo: "second"}
Foo: "second"
▽ [2]: {Foo: "third"}
Foo: "third"