web-dev-qa-db-fra.com

Comment ajouter une en-tête et / ou un pied de page à un ruisseau SED ou AWK?

J'ai un tas de sortie passant par SED et Awk.

Comment puis-je préfixer la sortie avec Démarrer et suffixer la réponse avec la fin?

Par exemple, si j'ai

All this code
on all these lines
and all these

Comment pourrais-je obtenir:

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

?

Ma tentative était:

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

mais j'ai eu

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END
14
Michael Durrant

Cela fonctionne, comme indiqué par Jasonwryan :

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

Cela peut être fait en sed avec

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

1i signifie i nsert avant la ligne 1; $a signifie a PPEND après la dernière ligne. Les $'…' Syntaxe est spécifique à Bash. Dans d'autres coquilles, vous devriez être capable de le faire avec:

sed -e '1i \Enter
 Démarrer '-e' $ a \Enter
FINIR'Enter
11
Scott

Si vous utilisez déjà SED, vous pouvez utiliser 1 Pour faire correspondre la première ligne et $ Pour faire correspondre la dernière ligne (voir Réponse de Scott ). Si vous utilisez déjà AWK, vous pouvez utiliser un bloc BEGIN Block pour exécuter le code avant la première ligne et un bloc END Block pour exécuter le code après la dernière ligne (voir Michael Durrant's réponse ).

Si tout ce que vous avez à faire est d'ajouter une en-tête et un pied de page, il suffit d'utiliser echo et cat.

echo START
cat
echo END

Dans un pipeline, utiliser plusieurs commandes, utilisez { … } Pour dire à l'analyseur qu'ils sont une seule commande composée.

content-generator |
{ echo START; cat; echo END; } |
postprocessor