【发布时间】:2023-03-21 02:31:01
【问题描述】:
假设我有一个文件,它只是重复非常相似的块(如下所示的简化示例)。提取某些块并将它们写入单独的文件的最快方法是什么?所有块都以相同的编号 \n 开头。输入文件可以有超过一百万个步骤,每个块可以是几千个原子。因此,我不想读取(巨大的)文件或完全循环它,因为我只需要有限数量的步骤(例如每 1000 步)。我正在考虑使用 bash 脚本(sed 或 head|tail 分组)、python(内存映射和使用正则表达式存储块)或 awk(Write blocks in a text file to multiple new files)。有没有我不知道的方法或语言? 谢谢
6
step 1
C 9.0000000 8.3380808 9.0000001
C 9.0000000 9.6619194 8.9999999
H 8.0768455 7.7678700 9.0000001
H 9.9231545 10.2321301 9.0000001
H 8.0768455 10.2321301 9.0000001
H 9.9231545 7.7678700 9.0000001
6
step 2
C 9.00000000 8.33808080 9.00000010
C 9.00000000 9.66191940 8.99999990
H 8.07684550 7.76787000 9.00000010
H 9.90912982 10.23213008 8.83969637
H 8.09087028 10.23213012 9.16030383
H 9.92315450 7.76787000 9.00000010
6
step 3
C 9.00000000 8.33808080 9.00000010
C 9.00000000 9.66191940 8.99999990
H 8.07684550 7.76787000 9.00000010
H 9.86748170 10.23213006 8.68426301
H 8.13251850 10.23213014 9.31573717
H 9.92315450 7.76787000 9.00000010
【问题讨论】:
-
见minimal reproducible example,你对任务的描述并没有真正的帮助
-
如果每个块的字节数相同,您可以
mmap文件并计算您需要的每个块的开始和结束。在那里寻找,读取确切的字节数并为每个块重复。如果字节数不同......那么你将不得不遍历整个文件。 -
如果块的大小都相同,可能与
dd相关? -
我只需要有限数量的步骤您能否显示所提供示例数据的预期输出?另外,那些
\ns 是字符串还是换行符?在后一种情况下,不需要在示例数据中显示它们,请将它们编辑掉。 -
6是后面block的数据行数吗?
标签: python-3.x awk bigdata