【发布时间】:2014-03-25 08:06:30
【问题描述】:
我有将数据流输出到其 STDOUT 的程序 (gawk)。 处理的数据实际上是 10 GB。 我不想将其保存在单个文件中,而是将其拆分为多个块,并可能在保存之前对每个块应用一些额外的处理(如压缩)。
我的数据是一系列记录,我不想将记录分成两半。 每条记录都匹配以下正则表达式:
^\{index.+?\}\}\n\{.+?\}$
或者为了简单起见,可以假设两行(首先是不均匀的,然后从流的开头开始编号)总是记录。
我可以:
- 使用一些标准的linux命令通过定义块的优选大小来分割STDIN?不需要精确,因为记录可变大小不能保证。或者,如果定义为记录数。按大小是不可能的
- 压缩每个块并存储在一个文件中(名称中有一些编号,如 001、002 等)
我已经知道GNU parallel 或csplit 之类的命令,但不知道如何将它们组合在一起。
如果上面解释的功能可以在不为其编写自定义 perl 脚本的情况下实现,那就太好了。然而,这可能是另一种最后的解决方案,但同样不确定如何最好地实施它。
【问题讨论】:
-
有什么原因不能将
split -l与-l参数的偶数一起使用?见:man split -
@PaulR 有 - 我需要首先将整个数据流实例化为磁盘上的物理文件。
标签: file split stdin gnu-parallel