zsh 中的 csplit:根据模式拆分文件

csplit in zsh: splitting file based on pattern

我想根据模式拆分以下文件 ABC:

ABC
4
5
6
ABC
1
2
3
ABC
1
2
3
4
ABC
8
2
3

获取文件 1:

ABC
4
5
6

文件 2:

ABC
1
2
3

等等

正在查看 man csplit 的文档:csplit my_file /regex/ {num}

我可以使用 csplit my_file '/^ABC$/' {2} 拆分此文件,但这需要我输入 {num} 的数字。当我尝试与假设尽可能重复模式的 {*} 匹配时,出现错误:

csplit: *}: bad repetition count

我正在使用 zshell。

要按照这样的模式拆分文件,我会转向 awk:

awk 'BEGIN { i=0; } 
     /^ABC/ { ++i; } 
     { print >> "file" i }' < input

这从名为 input 的文件中读取行;在读取任何行之前,BEGIN 部分明确地将“i”变量初始化为零; awk 中的变量默认为零,但明确无误。 “i”变量是我们对序列文件名的索引。

随后,以“ABC”开头的每一行都会递增这个“i”变量。

然后文件中的任何一行都将打印(以附加模式)到从文本“file”和“i”变量的当前值生成的文件名。