Procura baseada em parágrafos usando antes e depois das condições UNIX KSH

1

Eu tenho um arquivo como:

<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>

Eu preciso escrever as linhas entre as palavras After e Before em arquivos de saída separados. Por exemplo, os arquivos de saída devem se parecer com:

Line Number : Address1
Line Number : Address2
Line Number : Address3
......................
......................

Eu tentei isso:

awk '/After/,/Before/' Details.txt>output.txt

mas não funcionou. Como posso fazer isso?

    
por A.K. Singh 22.10.2015 / 12:34

1 resposta

1

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
    
por 22.10.2015 / 13:56