¿Cómo agregar un encabezado y / o pie de página a una secuencia sed o awk?

13

Tengo un montón de resultados pasando por sed y awk.

¿Cómo puedo prefijar la salida con START y sufijo la respuesta con END?

Por ejemplo, si tengo

All this code
on all these lines
and all these

¿Cómo podría obtener:

START
All this code
on all these lines
and all these
END

?

Mi intento fue:

awk '{print "START";print;print "END"}'

pero tengo

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END
Michael Durrant
fuente
99
Usando BEGIN y END ...
jasonwryan

Respuestas:

18

Esto funciona, como lo indica jasonwryan :

awk 'BEGIN{print "START"}; {print}; END{print "END"}'
Michael Durrant
fuente
11

Esto se puede hacer sedcon

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1imedios i nsert antes de la línea 1; $asignifica un ppend después de la última línea. La $'…'sintaxis es específica de bash. En otros shells, deberías poder hacer esto con:

sed -e '1i \ Enter
START' -e '$ a \ Enter
END'Enter
Scott
fuente
8

Si ya está usando sed, puede usar 1para hacer coincidir la primera línea y $para hacer coincidir la última línea (vea la respuesta de Scott ). Si ya está usando awk, puede usar un BEGINbloque para ejecutar código antes de la primera línea y un ENDbloque para ejecutar código después de la última línea (vea la respuesta de Michael Durrant ).

Si todo lo que necesita hacer es agregar un encabezado y un pie de página, simplemente use echoy cat.

echo START
cat
echo END

En una tubería, para ejecutar múltiples comandos, use { … }para decirle al analizador que son un solo comando compuesto.

content-generator |
{ echo START; cat; echo END; } |
postprocessor
Gilles 'SO- deja de ser malvado'
fuente