2016-10-03 100 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

相关问题