2016-10-03 107 views
-2

您好我正在處理大量數據的項目。我有一個包含鍵值對的大約2 GB的文本文件,每個鍵都有多個值。 我需要提取不同文件中的所有密鑰,因爲我需要用於測試特定功能的密鑰。用於從文本文件中提取特定模式信息的腳本

文件的格式爲:

:k: k1 :v: {XYZ:{id:"k1",score:0e0,tags:null},ABC:[{XYZ:{id:"k1",score:0e0,tags:null},PQR:[{id:"ID1",score:71.85e0,tags:[{color:"DARK"},{Type:"S1"},{color:"BLACK"}]},MetaData:{RuleId:"R3",Score:66.26327129015809e0,Quality:"GOOD"}},{XYZ:{id:"k1",score:0e0,tags:null},PQR:[..(same as above format)..],MetaData:{RuleId:"R3",Score:65.8234565409752e0,Quality:"GOOD"}} :: 

//same pattern repeats with different keys, and a new line 

當我搜索 「:K:」 用CTRL + F在文件中,這些鍵只得到強調。所以我認爲這種模式是沒有在文件中的行,除了開始的行

像這些有成千上萬的鍵。

我想把所有這些密鑰(k1,k2)提取到一個單獨的文件中進行測試。

有多行:k:並且想要在單獨的文件中分開(k1,k2,..)。我怎樣才能做到這一點?

Python對我也很好。我可以在python中使用正則表達式,也可以使用「sed」shell命令。請在這裏幫助我如何使用這些來提取密鑰。

有人可以幫我寫一個shell/python腳本。我知道它非常微不足道,但我是所有這類數據處理的新手。

同樣專注於優化運行時間,因爲數據非常大。

+0

我不會稱之爲_very trivial_。你能否提供一個真實的文件示例(不包括'...') –

+0

我已更新該文章!讓我知道你想知道的其他事情! – user2621826

+0

所以你想爲文件中的每個「第一個單詞」(:k :)創建一個單獨的文件? ':k:'有多行?如果是這樣,你想單獨的文件包含所有':k:'記錄,第一個,最後一個或? 。 (你的要求不清楚)。祝你好運。 – shellter

回答

0

假設像

:k: k1 :v: {XYZ:{id: 
:k2: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
:k3: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 

文件可以很容易地做到(在1道次),並用無記憶限制

awk '{fName=$1; gsub(/:/,"",fName); print >> fName ; close(fName)}' inFile 

其給出以下輸出

$ cat k 
:k: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
$ cat k2 
:k2: k1 :v: {XYZ:{id: 
$ cat k3 
:k3: k1 :v: {XYZ:{id: 

根據關於你有多少鑰匙,你可能不需要close(fName),但如果你不想花費t ime測試打開文件的限制,然後這是執行該過程的安全方法。

IHTH

相關問題