I would like help with the following algorithm in bash (or anything accessible through bash shell): I give a number to some function, and based on that number I obtain a string of alphabet letters. Example:
1 - A 2 - B .... 26 - Z .... 702 - ZZ 703 - AAA
I do not wish to occupy more memory than I need, so approaches such as for i in {A..Z} or echo {A..Z} or echo {A..Z}{A..Z} are not viable here. The closest I’ve managed to get is to find out how long is the sequence of letters for a particular number through the following expression:
printf %.0f\n $(echo '(scale=20;l($number)/l(26))+0.5000000000000000001' | bc -l)
After that, I am stuck. A little help?
Advertisement
Answer
Try this script:
#!/bin/bash
alphabet=( {A..Z} )
convertToString(){
dividend="$1"
colName=""
while (( dividend > 0 ))
do
mod=$(( (dividend-1)%26 ))
colName="${alphabet[$mod]}$colName"
dividend=$(( (dividend-mod)/26 ))
done
echo "$colName"
}
convertToString "$1"
Example output:
$ convertToString 1 A $ convertToString 2 B $ convertToString 27 AA $ convertToString 702 ZZ $ convertToString 703 AAA $ convertToString 16384 XFD $ convertToString 1187803 BOOBS