shell - 从txt文件中提取数据并根据特定文本动态创建新文件
问题描述
我的文件就像下面的猫Data.txt
****************** abc.txt - Starting point ********************
abc
asd
asad
asfkn
sadjn
****************** abc.txt - End point ********************
****************** def.txt - Starting point ********************
fjhdsf
sdjnbs
askd
akdsn
dhskn
****************** def.txt - End point ********************
****************** xyz.txt - Starting point ********************
akdsnaskd
sakdnbasd
akjsndb
askjdb
akdsnb
****************** xyz.txt - End point ********************
我想根据起点和终点动态创建多个文件。
我需要的输出是上述案例 3 文件:abc.txt ,def.txt ,xyz.txt
>> cat abc.txt
abc
asd
asad
asfkn
sadjn
>> cat def.txt
fjhdsf
sdjnbs
askd
akdsn
dhskn
你能帮我一个unix命令来做到这一点吗?
解决方案
这是一个 AWK 解决方案:
awk '/^(\*[ ]*)+/ {
gsub(/(\*[ ]*)+/,"")
match($0,/[ ]*-[ ]*Starting point/)
if(RLENGTH>0) fn=substr($0,1,RSTART-1)
next
}
fn { print $0 > fn }' Data.txt
它假定“终点”和“起点”之间没有线。
结果:
$ cat abc.txt
abc
asd
asad
asfkn
sadjn
推荐阅读
- c# - 创建动态按钮 C#
- android - 在 Odoo 移动框架中具有 odoo 功能的 OColumn 不起作用
- python - KERAS CUSTOM LOSS 中的错误“TypeError:传递给参数 'reduction_indices' 的值的 DataType float32 不在允许值列表中:int32,int64”
- python - 如何管理华为GSM调制解调器的音频进出文件?
- angular - 如何创建基于模型类的响应?
- java - Java根据优先级执行方法SYNC/ASYNC
- lisp - lisp 将值传递给函数?
- php - 这是在mysql中使用AND,OR的正确方法吗?
- typescript - 如何调试'npm ERR!403 在大多数情况下,您或您的依赖项之一正在请求您的安全策略禁止的包版本。
- angular - 将 NGX-DataTable 与 NGX-Formly 一起使用时如何向模型添加新行