문제

기본적으로 테이블 열에서 값을 가져 와서 XML 파일을 만들고 있습니다. 나는 시작하고있다 어색한 쉘 스크립트의 스크립트 (KSH 중요하다면) : 이와 같이 :

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

awk 스크립트, awl.file에는 다음이 포함됩니다.

BEGIN {
          print "<?xml version=\"1.0\" encoding=\"UTF-8\"?><GenTransactionHandler  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><EntityToPublish>\n<Entity type=\"C\" typeDesc=\"Customer level\"><TargetApplCode>UHUNLD</TargetApplCode><TrxName>GET_CUST_DATA</TrxName>"
      }
      {
          print "<value>"$1"</value>"
      }
END
      {
          print "</Entity>\n</EntityToPublish></GenTransactionHandler>"
      }

스크립트를 실행하면 어색한 오류가 발생합니다.

이것의 문제는 무엇입니까?

도움이 되었습니까?

해결책

이와 유사한 오류가 발생하는 경우 :

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

열린 브래킷을 끝과 같은 줄로 이동하여 코드를 수정하십시오.

END {
    ...

다른 팁

이 라인 :

FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n/''/g'`

쉽게 :

FILE_LIST=`echo "$SQL_RESULT"|sed -e 's/\n//g'`

그러나 어느 누구도 아무것도하지 않습니다. 당신의 의도가 모든 신약을 null 줄로 교체하려는 경우 다음을 수행하십시오.

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를 사용하고 있으므로 최신 정보를 NUL로 대체하기 위해 SED 또는 TR과 같은 다른 도구를 사용할 필요는 없습니다.

@op, 문제는 인용에 문제가있을 수 있습니다. 그러나 그것은 단지 추측 일뿐입니다. 추가 분석을 위해 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>"
      }


}
'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top