سؤال

وفي الأساس، وأنا إنشاء ملف XML عن طريق أخذ القيم من عمود من الجدول. أنا بدأت لhref="http://en.wikipedia.org/wiki/AWK" rel="nofollow AWK النصي من شيل (<لأ href = "HTTP: // en.wikipedia.org/wiki/Korn_shell "يختلط =" noreferrer نوفولو "> 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.

ما هي المشكلة في ذلك؟

هل كانت مفيدة؟

المحلول

إذا كنت تحصل على خطأ مشابهة لهذه:

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

وإصلاح التعليمات البرمجية الخاصة بك عن طريق تحريك قوس مفتوح إلى نفس الخط كما END:

END {
    ...

نصائح أخرى

وهذا السطر:

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 بالفعل، فإنه ليس من الضروري استخدام أدوات سد أو أخرى مثل آر لتحل محل أسطر جديدة مع NUL.

وOP، قد تكون المشكلة في quoting..but بك هذا مجرد تخمين. اظهار الناتج مزود للحصول على مزيد من التحليل

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