Recuperar texto de um arquivo grande usando um cabeçalho correspondente menor

0

Eu preciso extrair o texto entre dois cabeçalhos, se o primeiro corresponder com um arquivo de origem para procurar os cabeçalhos para pesquisar, por exemplo:

&Header1

1231241241313124123213123214124123213213124124123123212

1231231231231231231231231231232131242141241241231325552

2132141241232132132132141251232132142142132132132142412

&Header2

1231241241313124123213123214124123213213124124123123212

2132141241232132132132141251232132142142132132132142412

&Header3

1231241241313124123213123214124123213213124124123123212

1231231231231231231231231231232131242141241241231325552

213214124123213213213214125123213214

E meu arquivo de origem:

&Header1

&Header3

Portanto, recupere somente o cabeçalho 1 e 3 com as informações do número abaixo.

    
por User_Random39 18.05.2016 / 17:04

1 resposta

1
startheader=$(head -1 sourcefile)
endheader=$(tail -1 sourcefile)

# above lines assume your sourcefile has two lines in it and 
# each line contains the starting header and ending header

startlinenumber=$(grep -n "${startheader}" datafile|cut -d: -f1)
endlinenumber=$(grep -n "${endheader}" datafile|cut -d: -f1)

sed -n -e "${startlinenumber},${endlinenumber}p" datafile
Tenho certeza de que há uma maneira mais elaborada de fazer isso com awk ou perl ou talvez um único comando sed , mas eu só queria fornecer a lógica explicitamente. Você pode brincar com ele e adaptá-lo às suas necessidades.

    
por 18.05.2016 / 17:19

Tags