打印特定数量的模式匹配

时间:2013-07-25 16:32:09

标签: awk pattern-matching

我收到了下一格式的大文件:

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找到相同结果的模式。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

尝试:

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