我有一個帶有JSON數據的5GB 1班次文件,每行都從這個模式開始「{」created「。我需要能夠在我的Mac上使用Unix命令將這個1班輪的怪物轉換爲值得任何命令如何根據圖案將我的5GB 1班輪文件轉換爲線條?
ASCII English text, with very long lines, with no line terminators
我有一個帶有JSON數據的5GB 1班次文件,每行都從這個模式開始「{」created「。我需要能夠在我的Mac上使用Unix命令將這個1班輪的怪物轉換爲值得任何命令如何根據圖案將我的5GB 1班輪文件轉換爲線條?
ASCII English text, with very long lines, with no line terminators
如果您有足夠的內存,您可以使用TextWrangler應用程序(免費的BBEdit表弟)打開文件一次,並在整個文件中使用常規搜索/替換。在替換中使用\ r添加一個返回。打開文件時速度會很慢,如果內存不足,甚至可能會掛起,但最終可能會起作用。沒有腳本,沒有命令,..等等。我用大的SQL文件做了這個,有時它做了這個工作。
您必須用\ n或\ r或\ r \ n前面的相同字符串替換您的行起始字符串。
我有在Hexfiend上打開的文件,它有一個替換功能。記住,我不希望換行符在文件中,只是行,否則我的解析器在Java中會有問題。那我該怎麼做呢? – user3575840
@ user3575840我不明白「我不希望換行符在文件中」。沒有「行」沒有換行符(或返回)字符!在Mac上,你必須有\ r(返回),在Windows上你有「\ r \ n」(返回+換行) – FrancescoMM
你是對的。基本上它是一個微博json文件,有兩個'創建',例如,有人轉發,所以他'創造',然後轉發'創造'。這將如何工作。另外,每行以'lang:name'結尾,但並非所有語言都以相同名稱結尾? – user3575840
不清楚怎麼能說是「一個班輪」文件,但隨後每一行"{"created"
開始,但也許python -mjson.tool
可以幫助您開始:?
cat your_source_file.json | python -mjson.tool > nicely_formatted_file.json
管道原料通過``python -mjson.tool`將JSON格式化爲JSON格式,使其更易讀。更多信息here。
每個JSON是一條線,他們是推文。但是這一次,數以百萬計的推文位於一行,因此是一個奇怪的因素。我認爲我將文件格式從.txt更改爲.json,並做到了這一點。即使我的小型64MB示例推文文件保持不變並且可行。無論如何,你的代碼給我一個錯誤:額外的數據:第2行第1列20001第1列(字符4743 - 69430537) – user3575840
您可以使用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 + X ./myscript
,然後啓動它作爲./myscript在終端
在此之後,myscript文件是一個完整的unix命令
我不認爲這是正確的方法:( – user3575840
@ user3575840爲什麼?代碼是未經測試,但方法修改大文件是正確的(您可以讀取8KB塊並逐個保存8KB塊,在需要的地方添加換行符) – FrancescoMM
請從文件中發佈示例,以便其他人可以提供特定的答案。 (例如,該文件有一行看起來像'{「創建的」:「昨天」,「內容」:「茶」} {「創建」:「今天」,「內容」:「咖啡」}') –