我有一个带有JSON数据的5GB 1个衬里文件,每行都从这个模式“{”创建“开始。我需要能够在我的Mac上使用Unix命令将1个衬里的怪物转换成尽可能多的行应得的。任何命令?
ASCII English text, with very long lines, with no line terminators
答案 0 :(得分:0)
不清楚它是如何成为“单行”文件,但每行以"{"created"
开头,但也许python -mjson.tool
可以帮助您入门:
cat your_source_file.json | python -mjson.tool > nicely_formatted_file.json
通过``python -mjson.tool`管道原始JSON将干净地格式化JSON,使其更具人性化。更多信息here。
答案 1 :(得分:0)
您可以使用PHP作为shell命令(如果安装了PHP),只需保存名为“myscript”的文本文件和相应的代码(我现在无法测试代码,但想法如下)
未经审查的代码
#!/usr/bin/php
<?php
$REPLACE_STRING='{"created'; // anything you like
// open input file with fopen() in read mode
$inFp=fopen('big_in_file.txt', "r");
// open output file with fopen() in write mode
$outFp=fopen('big_out_file.txt', "w+");
// while not end of file
while (!feof($inFp)) {
// read file chunks here with fread() in variable $chunk
$chunk = fread($inFp, 8192);
// do a $chunk=str_replace($REPLACE_STRING,"\r".$REPLACE_STRING; // to add returns
// (or use \r\n for windows end of lines)
$chunk=str_replace($REPLACE_STRING,"\r".$REPLACE_STRING,$chunk);
// problem: if chunk contains half the string at the end
// easily solved if $REPLACE_STRING is a one char like '{'
// otherwise test for fist char { in the end of $chunk
// remove final part and save it in a var for nest iteration
// write $chunk to output file
fwrite($outFp, $chunk);
// End while
}
?>
保存之后你必须使它成为可执行文件sudo chmod a + x ./myscript
然后在终端
中将其作为./myscript启动此后,myscript文件是一个完整的unix命令
答案 2 :(得分:0)
OS X附带flex和bison,您可以使用它们为您的数据编写解析器。
答案 3 :(得分:0)
如果你有足够的内存,你可以使用TextWrangler应用程序(免费的BBEdit表兄弟)打开文件一次,并在整个文件上使用常规搜索/替换。在替换中使用\ r来添加返回。打开文件会很慢,如果内存不足,甚至可能会挂起,但最终它可能会起作用。没有脚本,没有命令,等等。我用大型SQL文件做了这个,有时它完成了这项工作。
你必须用你的前面用\ n或\ r或\ r \ n的相同字符串替换你的行开始字符串。