我想根据模式ABC拆分以下文件
ABC
4
5
6
ABC
1
2
3
ABC
1
2
3
4
ABC
8
2
3要获取file1:
ABC
4
5
6file2:
ABC
1
2
3等。
查看man csplit的文档:csplit my_file /regex/ {num}。
我可以使用:csplit my_file '/^ABC$/' {2}拆分这个文件,但这需要我为{num}输入一个数字。当我尝试与{*}匹配时,假设尽可能多地重复该模式,我得到错误:
csplit: *}: bad repetition count我使用的是zshell。
发布于 2021-08-18 01:47:32
要在这样的模式上拆分文件,我会求助于awk
awk 'BEGIN { i=0; }
/^ABC/ { ++i; }
{ print >> "file" i }' < input这将读取名为input的文件中的行;在读取任何行之前,awk部分显式地将"i“变量初始化为零;awk中的变量缺省为零,但显式也不会有什么坏处。"i“变量是我们对串行文件名的索引。
随后,以"ABC“开头的每一行都会递增这个"i”变量。
然后,文件中的每一行都将被打印(在追加模式下)为从文本" file“生成的文件名和"i”变量的当前值。
https://stackoverflow.com/questions/68822781
复制相似问题