以下はパフォーマンスの問題が多いスクリプトです。
#!/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
とにかく上記のスクリプトを使用してパフォーマンスを向上させることはできますか?
入力例:
1|5147634738948389685
サンプル出力
1|5147634738948389685|6 8 16 13 46 17 20 35 9 49 43
ベストアンサー1
外部ツールを呼び出す必要はありません。 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