Fondamentalement, je crée un fichier XML en prenant les valeurs d’une colonne d’une table. Je commence un script AWK à partir d’un script shell ( ksh si c’est important) comme ceci:
SQL_RESULT=`sqlplus -s ${CONNECT_STRING} << EOF ${SQLPLUS_SETTINGS} select customer_id from GD9_GENTH_CUST_SUBSCR; exit; EOF` FILE_LIST=`echo $SQL_RESULT|sed -e 's/\n/''/g'` echo $FILE_LIST|awk -f awk.file
Le script AWK, awl.file, contient:
BEGIN { print "\nUHUNLDGET_CUST_DATA" } { print ""$1"" } END { print "\n" }
Lorsque je lance le script, cela me donne une erreur AWK.
Quel est le problème avec cela?
Si vous obtenez une erreur similaire à celle-ci:
awk: syntax error at source line 9 source file xml.awk context is END >>> <<< { awk: bailing out at source line 12
Corrigez votre code en déplaçant le crochet ouvert sur la même ligne que END:
END { ...
Cette ligne:
FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n/''/g'`
pourrait tout aussi bien être:
FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n//g'`
mais personne ne fait rien. Si votre intention est de remplacer toutes les nouvelles lignes par une chaîne vide, faites ceci:
FILE_LIST=$( echo "$SQL_RESULT" | tr -d "\n" )
ou avec un espace:
FILE_LIST=$( echo "$SQL_RESULT" | tr "\n" " " )
Si vous voulez réellement remplacer toutes les nouvelles lignes par une paire de guillemets simples, c’est un peu plus compliqué:
FILE_LIST=$( echo "$SQL_RESULT" | sed -e '1{h};${x;s/\n/'\'\''/g;p};H;d' )
Puisque vous utilisez déjà awk, il n’est pas nécessaire d’utiliser sed ou d’autres outils comme tr pour remplacer les nouvelles lignes par nul.
@OP, le problème est peut-être dans vos citations..mais c’est juste une conjecture. affichez votre sortie SQL pour une parsing plus approfondie
SQL_RESULT=`sqlplus -s ${CONNECT_STRING} << EOF ${SQLPLUS_SETTINGS} select customer_id from GD9_GENTH_CUST_SUBSCR; exit; EOF` | awk 'BEGIN{ q="\042" print "\nUHUNLD GET_CUST_DATA " } { gsub("\n","") # this is the same as your sed command...but also depends on SQL output print ""$1" " } END { print " \n " } } '