從文字檔案中提取行,模式將透過解析文件來識別

從文字檔案中提取行,模式將透過解析文件來識別

基於以下場景,需要從 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

相關內容