Você pode tentar algo assim:
$ awk '/After/{a=1;next}/Before/{a=0}; (a==1){print NR" : "$0}' file
5 : Address1
6 : Address2
7 : Address3
13 : Address1
14 : Address2
15 : Address3
21 : Address1
22 : Address2
23 : Address3
29 : Address1
30 : Address2
31 : Address3
37 : Address1
38 : Address2
39 : Address3
A ideia é muito simples. A variável a
altera o valor se a linha atual corresponder a After
ou Before
e imprimirmos a linha apenas se a
for igual a 1.
Para salvá-los em arquivos de saída separados, você pode fazer:
awk '/After/{a=1; k++;next}/Before/{a=0}; (a==1){print NR" : "$0 > k".out"}' file
Aqui, estou usando a variável k
para contar quantas vezes a palavra After
é encontrada. O arquivo de saída será o valor atual de k
e .out
. Se eu executar o acima no seu exemplo, recebo:
$ ls
1.out 2.out 3.out 4.out 5.out