Recuperar texto de un archivo grande usando un encabezado coincidente más pequeño

Recuperar texto de un archivo grande usando un encabezado coincidente más pequeño

Necesito extraer el texto entre dos encabezados, si el primero coincide con un archivo fuente para buscar los encabezados a buscar, ejemplo:

&Header1

1231241241313124123213123214124123213213124124123123212

1231231231231231231231231231232131242141241241231325552

2132141241232132132132141251232132142142132132132142412

&Header2

1231241241313124123213123214124123213213124124123123212

2132141241232132132132141251232132142142132132132142412

&Header3

1231241241313124123213123214124123213213124124123123212

1231231231231231231231231231232131242141241241231325552

213214124123213213213214125123213214

Y mi archivo fuente:

&Header1

&Header3

Por lo tanto, recupere solo los encabezados 1 y 3 con la información numérica a continuación.

Respuesta1

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

Estoy bastante seguro de que hay una forma más elaborada de hacer esto con o awktal perlvez un sedcomando de una sola línea, pero solo quería darle la lógica explícitamente. Puedes jugar con él y adaptarlo a tus necesidades.

información relacionada