You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWK脚本报错‘function `header` not defined’技术求助

AWK脚本报错:FNR=1 fatal: function header not defined

我接手了一套代码,这套代码通过AWK读取CSV文件并生成格式化列表,但运行时出现错误:FNR=1 fatal: function header not defined。这套代码此前可正常运行,不清楚故障持续时长,现寻求技术帮助。相关文件如下:

CSV文件

"POSN","STATUS","TITLE","BEGIN_DATE","END_DATE","ROLL","PIDM","A_NUMBER","FIRST_NAME","LAST_NAME","EGRP"
"C99999","A","Title","01-JUL-95","","C",888888,"A00888888","John","Doe1","22"
"C99999","A","Ttile","01-JUL-95","","C",9999999,"A09999999","John","Doe2","23"
"C11111","A","Title","01-JUL-95","","C",0000001,"A00000001","John","Doe3","01"

$PROG_LC.awk

# fieldname    len
#  1 posn        6
#  2 status      1
#  3 title      30
#  4 begin_date 10
#  5 end_date   10
#  6 roll        1
#  7 a_number    8
#  8 a_number    9
#  9 first_name 15
# 10 last_name  30
# 11 egrp        4

BEGIN { pagelen = 20; pagewidth = 126
        lenheader = 4; lendetail = 1; lenfooter = 2 }

header() {
    print trititle("XXXXXXX", "Report",
          sprintf("Page %d", pagenum))
    print ""
    print " Posn  S Title                          Begin Date  End Date  " \
          "R A-Number  First Name      Last Name                      Egrp"
    print "------ - ------------------------------ ---------- ---------- " \
          "- -------- --------- --------------- ------------------------------ ----" }

detail(X) {
    printf "%-6.6s %-1.1s %-30.30s %-10.10s %-10.10s %-1.1s %-8.8s %-9.9s " \
           "%-15.15s %-30.30s %-4.4s\n", X[1], X[2], X[3], X[4], X[5],
           X[6], X[7], X[8], X[9], X[10], X[11] }

footer() { print ""; print trititle(user "@" sid, one_up, today) }

Shell脚本

#!/bin/sh

. $BANNER_HOME/local/exe/local_init.sh

H=/home/jobsub/${ORACLE_SID}_LOGS
PROG_LC=`echo $PROG | tr "[A-Z]" "[a-z]"`
PROG_UC=`echo $PROG | tr "[a-z]" "[A-Z]"`
CSV=$H/$(basename $PROG_LC .shl)_${ONE_UP}.csv
LOG=$H/$(basename $PROG_LC .shl)_${ONE_UP}.log
WHOAMI=$(whoami)

echo "BANUID     = $BANUID"     >> $LOG
echo "ONE_UP     = $ONE_UP"     >> $LOG
echo "PROG       = $PROG"       >> $LOG
echo "PRNT       = $PRNT"       >> $LOG
echo "ORACLE_SID = $ORACLE_SID" >> $LOG
echo "H          = $H"          >> $LOG
echo "PROG_LC    = $PROG_LC"    >> $LOG
echo "PROG_UC    = $PROG_UC"    >> $LOG
echo "CSV        = $CSV"        >> $LOG
echo "LOG        = $LOG"        >> $LOG
echo "WHOAMI     = $WHOAMI"     >> $LOG
echo "LOCAL_EXE  = $LOCAL_EXE"  >> $LOG

sqlplus -s $BAN9UID/@${TARGETDB} <<EOF
variable status number
begin :status := storedprocs.write_csv_file('$PROG_LC', $ONE_UP);
end;
/
exit :status
EOF

STATUS="$?"
echo "RETURN CODE = $STATUS" >> $LOG

if [ $STATUS -eq 0 ]
then echo "$PROG_UC completed successfully" >> $LOG
else echo "$PROG_UC completed with failure" >> $LOG
fi

if [ -f $LOCAL_EXE/$PROG_LC.awk ]
then LIS=$H/$(basename $PROG_LC .shl)_${ONE_UP}.lis
     LC_NUMERIC=en_US.utf8 gawk -f $LOCAL_EXE/csvtolis.awk \
         -f $LOCAL_EXE/$PROG_LC.awk $CSV > $LIS
     gurinso -n $ONE_UP -l $LIS -j $PROG -w $BANUID $BAN9UID/@${TARGETDB}
fi

exit $STATUS

csvtolis.awk

BEGIN { linenum = 0 
        pagenum = 0 
        user = toupper(ENVIRON["BAN9UID"]) 
        sid = ENVIRON["ORACLE_SID"] 
        oneup = ENVIRON["ONE_UP"] 
        "date +%m/%d/%Y" | getline today } 

function csvsplit(str, arr,     i,j,n,s,fs,qt) {
    # split comma-separated fields into arr; return number of fields in arr
    # fields surrounded by double-quotes may contain commas;
    #     doubled double-quotes represent a single embedded quote
    delete arr; s = "START"; n = 0; fs = ","; qt = "\""
    for (i = 1; i <= length(str); i++) {
        if (s == "START") {
            if (substr(str,i,1) == fs) { arr[++n] = "" }
            else if (substr(str,i,1) == qt) { j = i+1; s = "INQUOTES" }
            else { j = i; s = "INFIELD" } }
        else if (s == "INFIELD") {
            if (substr(str,i,1) == fs) {
                arr[++n] = substr(str,j,i-j); j = 0; s = "START" } }
        else if (s == "INQUOTES") {
            if (substr(str,i,1) == qt) { s = "MAYBEDOUBLE" } }
        else if (s == "MAYBEDOUBLE") {
            if (substr(str,i,1) == fs) {
                arr[++n] = substr(str,j,i-j-1)
                gsub(qt qt, qt, arr[n]); j = 0; s = "START" } } }
    if (s == "INFIELD" || s == "INQUOTES") { arr[++n] = substr(str,j) }
    else if (s == "MAYBEDOUBLE") {
        arr[++n] = substr(str,j,length(str)-j); gsub(qt qt, qt, arr[n]) }
    else if (s == "START") { arr[++n] = "" }
    return n }

function trititle(left, center, right,     gap1, gap2) { # assume sufficient space
    gap1 = int((pagewidth - length(center)) / 2) - length(left)
    gap2 = pagewidth - length(left) - length(center) - length(right) - gap1
    return left sprintf("%*s", gap1, "") center sprintf("%*s", gap2, "") right }

NR > 1 { nfields = csvsplit($0, csv); # print one record, with header/footer as needed
  if (pagelen - (linenum % pagelen) - lenfooter < lendetail) {
      while ((linenum + lenfooter) % pagelen != 0) { print ""; linenum++ }
      footer(); linenum += lenfooter }
  if (linenum % pagelen == 0) { pagenum++; header(); linenum += lenheader }
  detail(csv); linenum += lendetail
  if ((linenum + lenfooter) % pagelen == 0) { footer(); linenum += lenfooter } }

END { if (linenum % pagelen != 0) {                      # if not at top of page
          while ((linenum + lenfooter) % pagelen != 0) { # while not at bottom
              print ""; linenum++ }                      # skip to bottom
          footer() } }                                   # and print footer

内容的提问来源于stack exchange,提问作者user3685388

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:50:23