2014-04-26 23 views
-1

我有一個帶有JSON數據的5GB 1班次文件,每行都從這個模式開始「{」created「。我需要能夠在我的Mac上使用Unix命令將這個1班輪的怪物轉換爲值得任何命令如何根據圖案將我的5GB 1班輪文件轉換爲線條?

ASCII English text, with very long lines, with no line terminators 
+1

請從文件中發佈示例,以便其他人可以提供特定的答案。 (例如,該文件有一行看起來像'{「創建的」:「昨天」,「內容」:「茶」} {「創建」:「今天」,「內容」:「咖啡」}') –

回答

0

如果您有足夠的內存,您可以使用TextWrangler應用程序(免費的BBEdit表弟)打開文件一次,並在整個文件中使用常規搜索/替換。在替換中使用\ r添加一個返回。打開文件時速度會很慢,如果內存不足,甚至可能會掛起,但最終可能會起作用。沒有腳本,沒有命令,..等等。我用大的SQL文件做了這個,有時它做了這個工作。

您必須用\ n或\ r或\ r \ n前面的相同字符串替換您的行起始字符串。

+0

我有在Hexfiend上打開的文件,它有一個替換功能。記住,我不希望換行符在文件中,只是行,否則我的解析器在Java中會有問題。那我該怎麼做呢? – user3575840

+0

@ user3575840我不明白「我不希望換行符在文件中」。沒有「行」沒有換行符(或返回)字符!在Mac上,你必須有\ r(返回),在Windows上你有「\ r \ n」(返回+換行) – FrancescoMM

+0

你是對的。基本上它是一個微博json文件,有兩個'創建',例如,有人轉發,所以他'創造',然後轉發'創造'。這將如何工作。另外,每行以'lang:name'結尾,但並非所有語言都以相同名稱結尾? – user3575840

0

不清楚怎麼能說是「一個班輪」文件,但隨後每一行"{"created"開始,但也許python -mjson.tool可以幫助您開始:?

cat your_source_file.json | python -mjson.tool > nicely_formatted_file.json 

管道原料通過``python -mjson.tool`將JSON格式化爲JSON格式,使其更易讀。更多信息here

+0

每個JSON是一條線,他們是推文。但是這一次,數以百萬計的推文位於一行,因此是一個奇怪的因素。我認爲我將文件格式從.txt更改爲.json,並做到了這一點。即使我的小型64MB示例推文文件保持不變並且可行。無論如何,你的代碼給我一個錯誤:額外的數據:第2行第1列20001第1列(字符4743 - 69430537) – user3575840

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 + X ./myscript

,然後啓動它作爲./myscript在終端

在此之後,myscript文件是一個完整的unix命令

+0

我不認爲這是正確的方法:( – user3575840

+0

@ user3575840爲什麼?代碼是未經測試,但方法修改大文件是正確的(您可以讀取8KB塊並逐個保存8KB塊,在需要的地方添加換行符) – FrancescoMM

0

OS X附帶flex和bison,您可以使用它們爲您的數據編寫解析器。

+1

我只需要將文件分解成幾行:) – user3575840

+1

發佈您擁有的一些數據示例。 –

相關問題