我有一个巨大的文件,具有以下模式:
ABC
line 1
line 2
line 3
ABC
line 1
line 2
ABC
line1
ABC
line 1
line 3
使用csplit
工具,我可以根据/ABC/
模式将上面的文件拆分为 4 个子文件:
csplit -z input.txt /ABC/ {*}
我想知道如何手动指定所需输出文件的数量。
答案1
你可以使用awk
- 不完全是你想要的,但可能会成功。
想法:将 n 行打印到零件文件中,然后在创建新的零件文件之前搜索下一次出现的模式。
缺点:
- 如果您有大块并且只是跳过了此类块的开头,则某些文件可能会变得比其他文件大得多。
- 原始文件未删除(即所需空间的两倍)。
- 如所写,匹配线必须准确
ABC
(与同一行上的其他单词相比没有容差 - 可以调整) - 通过设置行数而不是所需的输出文件数来工作(按输入文件的行数估计)
akw
-脚本
BEGIN{
outfile="part_"++i
j=0
}
{
j++
#block size set to at least 10 lines in this example
#if threshold line number reached: search for next keyword,
#then increase part file name counter and reset line threshold counter
if ( j>=10 && $0 == "ABC" ) { outfile="part_"++i ; j=0 }
print > outfile
}
执行通过
awk -f script.awk input.txt