我有将数据流输出到其 STDOUT 的程序(gawk)。处理的数据实际上是 10 GB。我不想将它保存在单个文件中,而是将其拆分为多个块,并可能在保存之前对每个块应用一些额外的处理(如压缩)。
我的数据是一系列记录,我不想将记录分成两半。每条记录都匹配以下正则表达式:
^\{index.+?\}\}\n\{.+?\}$
或者为了简单起见,可以假设两行(首先是不均匀的,然后即使从流的开头编号)总是记录。
我可以吗:
- 使用一些标准的 linux 命令通过定义块的首选大小来拆分 STDIN?不需要精确,因为记录可变大小不能保证。或者,如果定义为记录数。按大小是不可能的
- 压缩每个块并存储在一个文件中(名称中有一些编号,如 001、002 等)
我已经意识到像GNU 并行这样的命令,csplit
但不知道如何将它们组合在一起。如果上面解释的功能可以在不为其编写自定义 perl 脚本的情况下实现,那就太好了。然而,这可能是另一种最后的解决方案,但同样不确定如何最好地实施它。