如何提高以下代码的性能

0 linux ksh

下面是我的脚本,它有很多性能问题

#!/usr/bin/ksh
while read i
do
  x=`echo $i |cut -d"|" -f2`
  rem=`expr $x % 62`
  echo "reminder is " $rem
  quo=`expr $x / 62`
  echo "quotiont is " $quo

  grp_rem=" "
  if [[ ${#quo} -ge 2 ]]
  then
    while [ $quo -ge 62 ]
    do
      sub_rem=`expr $quo % 62`
      quo=`expr $quo / 62`
      grp_rem=`echo $sub_rem" "$grp_rem`
    done
  fi
  echo $i"|"$quo" "$grp_rem" "$rem >> base62_while.out
done < base62_while.txt
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以使用上述脚本提高性能吗?

样本输入:

1|5147634738948389685
Run Code Online (Sandbox Code Playgroud)

样本输出

1|5147634738948389685|6 8 16 13 46 17 20 35 9 49 43
Run Code Online (Sandbox Code Playgroud)

gle*_*man 5

您不需要调用任何外部工具:ksh 可以进行算术运算。我还使用数组来存储余数

#!/usr/bin/ksh
div=62
while IFS='|' read -r n x; do
    rem=$(( x % div ))
    quo=$(( x / div ))
    echo "reminder is  $rem" >&2
    echo "quotiont is  $quo" >&2

    remainders=( $rem )
    while (( quo >= div )); do
        sub_rem=$(( quo % 62 ))
        quo=$(( quo / 62 ))
        echo "reminder is  $sub_rem" >&2
        echo "quotiont is  $quo" >&2
        remainders=( $sub_rem "${remainders[@]}" )
    done
    echo "$n|$x|$quo ${remainders[*]}"

    x=$quo
    for r in "${remainders[@]}"; do
        x=$(( x * div + r ))
    done
    echo Verification: $x
done <<END
1|5147634738948389685
END
Run Code Online (Sandbox Code Playgroud)