从文本文件中提取行,模式将通过解析文件来识别

从文本文件中提取行,模式将通过解析文件来识别

基于以下场景,需要从 txt 文件中提取行到其他文件:

要匹配的第一个模式将始终是以单词 开头的行identifier,然后第二个模式将是第一行,以 开头000

在下面的例子中,它将是

000: thislineneedstobeextracted  

将输出写入第一个文件后,我们提取以单词 开头的行identifier,以及再次以 : 开头的行,000但这次,对于文件中找到的第二个唯一出现的行,在我们的示例中,

000: alsothislineneedstobeextracted  

输出将写入第二个文件,依此类推。

示例输入

identifier 767  
linetobeignored  
anotherlinetobeignored  
000: thislineneedstobeextracted  
000: alsothislineneedstobeextracted  
blankline  
identifier 7686    
linetobeignored  
anotherlinetobeignored  
000: thislineneedstobeextracted  
000: alsothislineneedstobeextracted  
000: ayetanotherlineneedstobeextracted  

示例输出 file1.txt:

000: thislineneedstobeextracted  
identifier 767  
identifier 7686    

示例输出 file2.txt:

000: alsothislineneedstobeextracted  
identifier 767  
identifier 7686    

答案1

尝试用awk

awk '
    /^id/{
        if(line[1]){
            for(n in line)print line[n],i,$0 >> "file"n".txt"
            delete(line)
            }
        c=0
        i=$0
        }
    /^000:/{
        line[++c]=$0
        }
    END{
        if(line[1]){
            for(n in line)print line[n],i,$0 >> "file"n".txt"
        }
    ' OFS=\\n txt.file

相关内容