Textdeskew坏数组下标

时间:2017-10-22 11:50:03

标签: bash

使用Freds ImageMagick Textdeskew Script时出现上述错误错误如下所示:

awk: line 38: syntax error at or near *
/home/work/textdeskew: line 468: regression_Arr: bad array subscript
/home/work/textdeskew: line 474: regression_Arr: bad array subscript

错误出现的行如下所示:

angle=`echo ${regression_Arr[rnum-1]} | cut -d: -f2`         line 468
# set rotation to be correct for -90<=angle<90 (+90 will be upside downs)
rotation=`convert xc: -format "%[fx:$angle<0?-($angle+90):-($angle-90)]" info:`
rotation=`convert xc: -format "%[fx:abs($rotation)<0.00001?0:$rotation]" info:`

# remove outliers, if res_ave > res_thresh
res_ave=`echo ${regression_Arr[rnum-7]} | cut -d: -f2`   line 474

我假设错误是因为rnum是0.但是我不确定如何读取和调试脚本来解决错误,因为这可能不是这种情况。这是声明rnumregression_Arr的地方:

    linearRegression() 
        {
        Arr="$1"
        regression_Arr=(`echo "${Arr[*]}" | awk \
        'BEGIN { FS = ","; RS = " "; pi = atan2(0, -1); }
        NF == 2 { x_sum += $1
                  y_sum += $2
                  xy_sum += $1*$2
                  x2_sum += $1*$1
                  y2_sum += $2*$2
                  num += 1
                  x[NR] = $1
                  y[NR] = $2
                }
        END { mean_x = x_sum / num
              mean_y = y_sum / num
              for (i = 1; i <= num; i++) {  
                  delx = (x[i]-mean_x)
                  dely = (y[i]-mean_y)
                  numerator += delx*dely
                  denominator += dely*dely - delx*delx
              }
              phi = 0.5*atan2(-2*numerator,denominator)
              r = mean_x*cos(phi)+mean_y*sin(phi)
              if ( sqrt(phi*phi) < 0.0001 ) {
                  angle = -90
              }
              else {
                  slope = -cos(phi)/sin(phi)
                  inter = r/sin(phi)
                  angle = (180/pi)*atan2(slope,1)
              }
              for (j = 1; j <= num; j++) {
                  delr = (x[j]*cos(phi)+y[j]*sin(phi)-r)
                  res_sq = delr*delr
                  sum_res_sq += res_sq
                  res = sqrt(delr*delr)
                  sum_res += res
                  print "Residual"j":"res
              } 
              res_ave = sum_res/num
              res_std = sqrt((sum_res_sq/num)-(sum_res/num)**2)
              print "res_ave:"res_ave
              print "res_std:"res_std
              print "phi:"phi
              print "r:"r
              print "Slope:"slope
              print "Intercept:"inter
              print "Angle:"angle
            }'`)

        rnum=${#regression_Arr[*]}
        if $debug; then
            echo ""
            echo "rnum=$rnum;"

            # list regression data
            for ((ii=0; ii<rnum; ii++)); do
            echo "${regression_Arr[$ii]}"
            done
        fi

        }

我想知道这个脚本是否曾经工作过,现在还没有代码中的更新?

1 个答案:

答案 0 :(得分:0)

通过安装gawk并执行新错误bc来解决此问题。非常感谢@ fmw42在ImageMagick论坛上提供帮助。