首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zsh中的csplit :基于模式拆分文件

zsh中的csplit :基于模式拆分文件
EN

Stack Overflow用户
提问于 2021-08-17 19:05:04
回答 1查看 74关注 0票数 1

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

代码语言:javascript
复制
ABC
4
5
6
ABC
1
2
3
ABC
1
2
3
4
ABC
8
2
3

要获取file1:

代码语言:javascript
复制
ABC
4
5
6

file2:

代码语言:javascript
复制
ABC
1
2
3

等。

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

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

代码语言:javascript
复制
csplit: *}: bad repetition count

我使用的是zshell。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-18 01:47:32

要在这样的模式上拆分文件,我会求助于awk

代码语言:javascript
复制
awk 'BEGIN { i=0; } 
     /^ABC/ { ++i; } 
     { print >> "file" i }' < input

这将读取名为input的文件中的行;在读取任何行之前,awk部分显式地将"i“变量初始化为零;awk中的变量缺省为零,但显式也不会有什么坏处。"i“变量是我们对串行文件名的索引。

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

然后,文件中的每一行都将被打印(在追加模式下)为从文本" file“生成的文件名和"i”变量的当前值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68822781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档