【问题标题】:Script for extracting information of specific pattern from a text file从文本文件中提取特定模式信息的脚本
【发布时间】:2016-10-03 19:31:57
【问题描述】:

您好,我正在从事一个处理大量数据的项目。我有一个大约 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

当我使用 CTRL+F 在文件中搜索“:k:”时,这些键只会突出显示。所以我认为除了行首之外,这种模式在文件中没有任何位置

像这样有成千上万个键。

我希望将所有这些键 (k1, k2) 提取到单独的文件中进行测试。

:k: 有多行,并且想在单独的文件中分隔 (k1, k2, ..)。我该怎么做?

Python 也适合我。我可以在 python 中使用正则表达式,也可以使用“sed”shell 命令。请在这里帮助我如何使用这些来提取密钥。

有人能帮我写一个 shell/python 脚本吗?我知道它非常琐碎,但我对所有这些数据处理都是新手。

同样注重优化运行时间,因为数据非常大。

【问题讨论】:

  • 我不会说那是非常微不足道的。你能提供一个文件的真实例子(没有...
  • 我已经更新了帖子!如果您还有其他想知道的,请告诉我!
  • 所以您想为文件中的每个“第一个单词”(:k:) 创建一个单独的文件? :k: 有多行?如果是这样,您是否希望单独的文件包含所有 :k: 记录、第一条、最后一条或 ??? . (您的要求不清楚)。祝你好运。
  • 是的,正确。 :k: 有多行,想在单独的文件中分隔 (k1, k2, ..)

标签: python bash shell pattern-matching data-processing


【解决方案1】:

假设一个文件像

: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),但如果您不想花时间测试打开文件的限制,那么这是执行此过程的安全方法。

IHTH

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多