
Необходимо извлечь строки из 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