我需要 bash 中以下算法(或通过 bash shell 访问的任何内容)的帮助:我给某个函数一个数字,并根据该数字获得一串字母。示例:
1 - A
2 - B
....
26 - Z
....
702 - ZZ
703 - AAA
我不希望占用比我需要的更多的内存,因此诸如 for i in {A..Z}
或 echo {A..Z}
或 echo {A..Z}{A..Z}
之类的方法在这里不可行。我设法得到的最接近的是通过以下表达式找出特定数字的字母序列有多长:
printf %.0f\\n $(echo '(scale=20;l($number)/l(26))+0.5000000000000000001' | bc -l)
在那之后,我陷入了困境。有一点帮助吗?
最佳答案
尝试这个脚本:
#!/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"
示例输出:
$ convertToString 1
A
$ convertToString 2
B
$ convertToString 27
AA
$ convertToString 702
ZZ
$ convertToString 703
AAA
$ convertToString 16384
XFD
$ convertToString 1187803
BOOBS
关于linux - 在 bash 中打印字母表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24123511/