1

我想根据模式拆分以下文件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。

4

1 回答 1

1

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

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

这将从名为input;的文件中读取行。在读取任何行之前,该部分将“ ”变量BEGIN显式初始化为零;iawk 中的变量默认为零,但明确表示永远不会有坏处。“i”变量是我们对串行文件名的索引。

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

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

于 2021-08-18T01:47:32.183 回答