2013-07-25 3 views
1

У меня есть большой файл в следующем формате:печати определенное количество шаблона соответствует

test.txt 
bandera1 
abc 
def 
ghi 
jkl 
bandera2 
bandera1 
abc 
def 
ghi 
jkl 
bandera2 
... 

Я хочу, чтобы разбить файл на несколько файлов, таких как:

file1.txt

bandera1 
abc 
def 
ghi 
jkl 
bandera2 
... 

file2.txt

bandera1 
abc 
def 
ghi 
jkl 
bandera2 
... 

Я попытался с AWK, чтобы найти закономерность:

awk'{/patter1/,/patter2/} {print}' $test.txt >> file$a 

Но я не могу это остановить на после определенного количества матчей. Я также попробую sed, чтобы найти шаблон, к сожалению, с тем же результатом.

Может ли кто-нибудь помочь мне с этой проблемой?

+0

file2.txt должна начинаться где file1.txt конец – user2619593

ответ

0

Try:

awk 'BEGIN { n = 1 } { print $0 > "bandera" n } /bandera2/ { n++ }' infile 

Для входного файла:

bandera1 
abc 
def 
ghi 
jkl 
bandera2 
bandera1 
abc 
def 
ghi 
jkl 
bandera2 
bander1 
... 
bandera2 

Это дает:

==> bandera1 <== 
bandera1 
abc 
def 
ghi 
jkl 
bandera2 

==> bandera2 <== 
bandera1 
abc 
def 
ghi 
jkl 
bandera2 

==> bandera3 <== 
bander1 
... 
bandera2 

ОБНОВЛЕНО (см комментарии):

awk ' 
    BEGIN { n = m = 1 } 
    { print $0 > "bandera" n } 
    /bandera2/ { 
     if (m == 500) { n++; m = 0 } 
     m++ 
    } 
' infile 
+0

Thnks, которые работают очень хорошо, один вопрос увеличение п может быть условным, как если п -EQ 500, то п ++, так как мне нужно положить в в одном файле несколько шаблонов совпадений, пытающихся внедрить n ++ что-то вроде этого: {if [$ n -eq 500], затем n ++}, поэтому bandera1 может записывать как 500 совпадений с образцом – user2619593

+0

@ user2619593: я обновил ответ. Я использую дополнительную переменную до '500', которая указывает, когда нужно увеличивать другую, которая используется в именах выходных файлов. – Birei

+0

спасибо, что работа большой. Приветствия. – user2619593

Смежные вопросы