根据每 X 个正则表达式模式匹配拆分文件

根据每 X 个正则表达式模式匹配拆分文件

这个问题类似于根据正则表达式分割文本文件,但又不完全相同。我的问题是我不想将其拆分为特定数量的文件,但我实际上想根据匹配的数量来拆分它。例如:我有一个 457 MB 的文件,并尝试将其拆分为更小的文件。以下是目前正在进行的工作:

csplit -z Scan.nessus /\<ReportHost/ '{*}'

然而,这为我创建了大约 61.5k 个文件,因为我有一个<ReportHost这个 457MB 文件中的这些条目。最终,我想按每 50 个条目而不是每个条目进行细分。

有没有办法修改它来实现这一点?我在某种程度上尝试在 Ruby 中执行此操作,但尝试使用 Nokogiri 解析文件时似乎会耗尽虚拟机的内存。

答案1

重用awk- 方法

BEGIN{outfile="part_0" ; j=-1}
/\<ReportHost/ {j++}
j==50 {outfile="part_"++i ; j=0}
{print > outfile}

运行为

awk -f split.awk Scan.nessus

处理时不删除旧文件的问题仍然存在。

对于零填充的输出文件,您可以使用

outfile="part_"sprintf("%04d",i++)

和 BEGIN 块中的“part_0000”。那么希望文件不要超过10000个。或者事先检查您期望的文件数量。

相关内容