我有一个由计算机模拟生成的纵向数据集,可以用下表表示(“var”是变量):
time subject var1 var2 var3
t1 subjectA ...
t2 subjectB ...
和
subject name
subjectA nameA
subjectB nameB
但是,生成的文件会以类似于以下格式的格式写入数据文件:
time t1
description
subjectA nameA
var1 var2 var3
subjectB nameB
var1 var2 var3
time t2
description
subjectA nameA
var1 var2 var3
subjectB nameB
var1 var2 var3
...(and so on)
我一直在使用(python)脚本将此输出数据处理为平面文本文件,以便我可以将其导入 R、python、SQL 或 awk/grep 以提取信息 - 所需信息类型的示例单个查询(在 SQL 表示法中,数据转换为表后)如下所示:
SELECT var1, var2, var3 FROM datatable WHERE subject='subjectB'
我想知道是否有更有效的解决方案,因为这些数据文件中的每一个都可能约为 100MB(我有数百个),并且创建平面文本文件非常耗时,并且会占用额外的硬盘空间和冗余信息。理想情况下,我会直接与原始数据集交互以提取我想要的信息,而无需创建额外的平面文本文件......对于此类任务是否有更简单的 awk/perl 解决方案?我非常精通 python 中的文本处理,但我的 awk 技能还很初级,而且我没有 perl 的工作知识;我想知道这些或其他特定领域的工具是否可以提供更好的解决方案。
谢谢!
后记: 哇,谢谢大家!很抱歉我不能选择每个人的答案@FM:谢谢。我的 Python 脚本类似于您的代码,但没有过滤步骤。但是你的组织是干净的。@PP:我以为我已经精通 grep 但显然不是!这非常有帮助......但我认为将“时间”混合到输出中时 grepping 变得很困难(我未能在我的示例中将其作为可能的提取场景包括在内!那是我的错)。@ghostdog74:这真是太棒了...但是修改该行以获取“subjectA”并不简单...(尽管同时我会阅读更多关于 awk 的内容,希望以后能深入了解)。@weismat:说得好。@S.Lott:这非常优雅和灵活——我不是在要求 python(ic) 解决方案,但这完全适合解析、过滤、
再次,我感谢大家 - 非常感谢。