Unix 为什么此AWK脚本会导致语法错误?

Unix 为什么此AWK脚本会导致语法错误?,unix,shell,scripting,sed,awk,Unix,Shell,Scripting,Sed,Awk,基本上,我是通过从表的列中获取值来创建XML文件的。 我从一个shell脚本(如果重要的话)开始编写一个脚本,如下所示: 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 $FI

基本上,我是通过从表的列中获取值来创建XML文件的。 我从一个shell脚本(如果重要的话)开始编写一个脚本,如下所示:

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

SQL\u RESULT=`sqlplus-s${CONNECT\u STRING}如果您遇到类似以下错误:

awk: syntax error at source line 9 source file xml.awk
 context is
    END >>> 
 <<< {
awk: bailing out at source line 12

如果您遇到与此类似的错误:

awk: syntax error at source line 9 source file xml.awk
 context is
    END >>> 
 <<< {
awk: bailing out at source line 12
这一行:

FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n/''/g'`
也可能是:

FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n//g'`
但谁也不做任何事。如果您打算用空字符串替换所有换行符,请执行以下操作:

FILE_LIST=$( echo "$SQL_RESULT" | tr -d "\n" )
或使用空格:

FILE_LIST=$( echo "$SQL_RESULT" | tr "\n" " " )
如果你真的想用一对单引号替换所有的换行符,那就有点复杂了:

FILE_LIST=$( echo "$SQL_RESULT" | sed -e '1{h};${x;s/\n/'\'\''/g;p};H;d' )
这一行:

FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n/''/g'`
也可能是:

FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n//g'`
但谁也不做任何事。如果您打算用空字符串替换所有换行符,请执行以下操作:

FILE_LIST=$( echo "$SQL_RESULT" | tr -d "\n" )
或使用空格:

FILE_LIST=$( echo "$SQL_RESULT" | tr "\n" " " )
如果你真的想用一对单引号替换所有的换行符,那就有点复杂了:

FILE_LIST=$( echo "$SQL_RESULT" | sed -e '1{h};${x;s/\n/'\'\''/g;p};H;d' )

因为您已经在使用awk,所以不需要使用sed或其他工具(如tr)来用nul替换换行符

@哦,问题可能出在你的报价上……但那只是一个猜测。显示sql输出以进行进一步分析

SQL_RESULT=`sqlplus -s ${CONNECT_STRING} << EOF
${SQLPLUS_SETTINGS}
select customer_id from GD9_GENTH_CUST_SUBSCR;
exit;
EOF` | awk 'BEGIN{
          q="\042"
          print "<?xml version="q"1.0"q" encoding="q"UTF-8"q"?><GenTransactionHandler xmlns:xsi="q"http://www.w3.org/2001/XMLSchema-instance"q"><EntityToPublish>\n<Entity type="q"C"q" typeDesc="q"Customer level"q"><TargetApplCode>UHUNLD</TargetApplCode><TrxName>GET_CUST_DATA</TrxName>"
}
      {
          gsub("\n","")  # this is the same as your sed command...but also depends on SQL output
          print "<value>"$1"</value>"
      }
END
      {
          print "</Entity>\n</EntityToPublish></GenTransactionHandler>"
      }


}
'

SQL\u RESULT=`sqlplus-s${CONNECT\u STRING}因为您已经在使用awk,所以不必使用sed或其他工具(如tr)将换行符替换为nul

@哦,问题可能出在你的报价上……但那只是一个猜测。显示sql输出以进行进一步分析

SQL_RESULT=`sqlplus -s ${CONNECT_STRING} << EOF
${SQLPLUS_SETTINGS}
select customer_id from GD9_GENTH_CUST_SUBSCR;
exit;
EOF` | awk 'BEGIN{
          q="\042"
          print "<?xml version="q"1.0"q" encoding="q"UTF-8"q"?><GenTransactionHandler xmlns:xsi="q"http://www.w3.org/2001/XMLSchema-instance"q"><EntityToPublish>\n<Entity type="q"C"q" typeDesc="q"Customer level"q"><TargetApplCode>UHUNLD</TargetApplCode><TrxName>GET_CUST_DATA</TrxName>"
}
      {
          gsub("\n","")  # this is the same as your sed command...but also depends on SQL output
          print "<value>"$1"</value>"
      }
END
      {
          print "</Entity>\n</EntityToPublish></GenTransactionHandler>"
      }


}
'

SQL\u RESULT=`sqlplus-s${CONNECT\u STRING}您可能需要引用
“$SQL\u RESULT”
您可能需要引用
“$SQL\u RESULT”
-1表示没有给出错误消息。@彼得·莫滕森:我认为维基百科链接对于像awk和ksh这样众所周知的东西是不必要的。-1表示没有给出错误消息。@彼得·莫滕森:我认为维基百科链接对于像awk和ksh这样众所周知的东西是不必要的。