首页 > 解决方案 > 从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命令来做到这一点吗?

标签: shellunixawksed

解决方案


这是一个 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

推荐阅读