J'ai en entrée un fichier de commandes sybase dont la syntaxe est :
ORDRE SQL
go
Je veux à chaque ligne qui commence par la commande execute (pour exécuter une procédure stockée) ajouter un commentaire.
L'ordre sql sera exécute par le go (cf ; dans oracle / mysql).
Je récupère l'argument de la procédure stockée qui est le 3ème élément.
Par exemple : execute sp_toto 'TITI' ou sp_toto est la procédure et TITI l'argument (et aussi le $3 de la ligne)
J'ajoute aussi $0 pour afficher la ligne de commande SQL originale.
Si ce n'est pas un execute le SQL ne sera pas changé et utilisé tel quel :
nawk '
$1 !~/execute/ { print $0} ;
$1 ~/execute/ { print "argument "$3" LINE: "NR"\n"$0""}
' script.sql >newscript.sql
De plus l'argument de la procedure est entouré de ' (simple quote) qu'il faut enlever pour pouvoir generer un print via isql (le sqlplus de sybase)
La ca devient plus difficile car il faut substituer le ' de la commande originale par un blanc ("").
Or le "'" est interprété par le shell ce qui empeche l'interpretation du " suivant et donc de la non fermeture du nawk global. Il faut donc passer le ' en parametre de nwak par une variable grace à l'argument -v de nawk :
nawk -v quote="'" 
J'ajoute ainsi à chaque execute du fichier script.sql le commentaire "argument ". Au final j'ai le script suivant :
 nawk -v quote="'" ' 
$1 !~/execute/ { print $0} ;
$1 ~/execute/ {
fil=$3 ;
gsub(quote,"",fil) ;
printf "Execution de la filliale %s, ligne %s \n",fil,NR ;
print $0 ;
}
' script.sql >newscript.sql