Eu quero procurar por uma string e puxar todas as linhas entre dois padrões [duplicado]

1

Eu quero procurar por uma string e puxar todas as linhas entre dois padrões (incluindo o padrão).

START#1

Name S

101

Frankfurt_1_1

19

A+

Street


END


START#2

Name B

104

Berlin

20

A+

Street


END



START#100

Name C

107

Berlin

21

A+

Street

END



START#24

Name D

110

Frankfurt_1_1

21

A+



END

Se eu grep Frankfurt

Em seguida, ele deve exibir todas as linhas entre START e END (incluindo START e END), como:

START#1

Name S

101

Frankfurt_1_1

19

A+

Street


END


START#24

Name D

110

Frankfurt_1_1

21

A+

Street


END

Comando que usei:

cat file | awk '/START/,/END/' | grep -p Frankfurt

Mas não funcionou.

    
por user4432340 21.04.2016 / 11:18

2 respostas

1

Não tenho certeza se o awk é a ferramenta correta para esse trabalho, pois sua pesquisa é baseada em várias linhas. Eu acho que é um trabalho para o perl. Percorrendo o seu arquivo você pode usar (semelhante à sua declaração awk):

if (/^START/ .. /^END/){}

lá você armazena suas linhas em uma matriz, que você vai imprimir se o Frankfurt for encontrado (use um booleano aqui):

push @lines, $_;
if (/Frankfurt/)
        $toPrint = 1;

e em todos os casos quando você está fora de seu padrão, imprima o array se o seu booleano é verdadeiro, não imprima de outra forma, esvazie seu array.

    
por 21.04.2016 / 12:07
0

Definitivamente, podemos usar awk , tente este

awk -v RS="END" '$0~/Frankfurt/{print $0 RS}' file
    
por 21.04.2016 / 12:27