一个JSON文件中有12000行以上的对象:
{
"System": "2334",
"Id": "AP64531346-2016055553824",
"dtis": "106165099",
"Type": "Up",
... (in total, 112 lines per record)
}
{
"System": "873",
"Id": "AP24531346-20160676553824",
"dtis": "1261699",
"Type": "Up",
... (in total, 112 lines per record)
}
我想把大文件分成小文件,每个小文件有一个入口(112行),并将每个文件的名称设置为“Id”的值,我的意思是分别以AP64531346-201605553824.txt和AP24531346-20160676553824为例。在
我尝试了GNU分割,但无法将每个文件的名称设置为Id plus.txt。在
^{pr2}$有什么建议吗?在
分两个步骤:首先使用
现在有了名为
^{pr2}$xaa
、xab
等的文件,我假设这些是目录中唯一的文件。现在可以循环它们,提取Id并重命名它们:grep -o
只提取匹配项,并使用零宽度的“look-behind”来获取Id行。仅当使用Perl regex引擎(-P
)时,才可以使用环顾。-m 1
在第一个匹配之后停止,这样当您知道第一个匹配足够好时,就不会遍历整个文件。在当每个块没有112行时,这当然会严重中断,因为proper solution会解析文件。
听起来好像您希望将每个JSON文档放在自己的文件中。您可以使用JSON::XS的增量解析器来实现这一点。在
任务的一般方法(即不假设输入文件中的JSON实体流,只假设它们是有效的JSON实体)如以下“一行代码”所示:
这使用“JSON query”(jq)命令行处理器,这在许多平台上都可用。在
如果您希望每个新文件都能很好地打印出来,那么您也可以在第二步中使用jq,例如:
^{pr2}$相关问题 更多 >
编程相关推荐