linux - 在 bash 中打印字母表

标签 linux bash

我需要 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/

相关文章:

linux - 使用 awk 从文件中读取特定文本

linux - 如何在 linux 内核中使用 map 进行键值存储?

arrays - 如何使用 plotutils 直接绘制数组

linux - 如何编写一个脚本来输出一个包含两个对应变量的表格?

ios - 从 plutil 获取信息

linux - 使用 awk linux 操作文件

linux - `setenv DISPLAY name:1001.0`在Linux中是什么意思?

linux - 在 termux 中安装 Octave, "Unable to correct problems, you have held broken packages"

bash - 除了通常的 stdin/stdout/stderr (0, 1, 2) 之外,我们还能有更多的文件描述符吗?

linux - 仅列出 Red Hat 卫星子 channel ,每个基本 channel