2009-10-22 4 views
0

기본적으로 테이블의 열에서 값을 가져와 XML 파일을 만듭니다. 나는 다음과 같은 쉘 스크립트에서 AWK 스크립트 (이 중요한 경우 ksh)를 시작하고있다 :이 AWK 스크립트가 구문 오류를 일으키는 이유는 무엇입니까?

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 오류를 준다.

이 문제는 무엇입니까?

+1

어떤 종류의 "awk 오류"? – ndim

+1

-1은 오류 메시지를 표시하지 않음을 나타냅니다. –

+0

@Peter Mortensen : awk 및 ksh와 같이 잘 알려진 것에 대해서는 Wikipedia 링크가 필요하지 않다고 생각합니다. –

답변

3

이 유사한 오류 얻는 경우 :

END { 
    ... 
0

이 행 :

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

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'` 

하지만 아무도 아무 것도하지 않습니다. 당신의 의도가 널 (null) 문자열의 모든 줄 바꿈을 대체하는 경우,이 작업을 수행합니다

FILE_LIST=$(echo "$SQL_RESULT" | tr "\n" " ") 

실제로 단일 한 쌍의 모든 줄 바꿈을 바꾸려면 :

FILE_LIST=$(echo "$SQL_RESULT" | tr -d "\n") 

을하거나 공간 따옴표, 그건 좀 더 복잡 :

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

당신은 아마''$ ​​SQL_RESULT "' –

+0

을 인용 할 필요가 있습니다. 나는 copy-paste-itis를 주장한다. –

0

이미 AWK를 사용하고 있기 때문에, NUL로 줄 바꿈을 대체 할 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>" 
     } 


} 
' 
관련 문제