Bash 从 split 命令计算字母后缀(即以字母为基数的 26 整数)
Bash compute the letter suffix from the split command (i.e. integer into base 26 with letters)
split
命令默认生成格式为“aa”“ab”...“by”“bz”...的文件后缀...
但是在脚本中,我需要恢复这个后缀,从文件号开始作为一个整数(没有 globbing)。
我写了下面的代码,但也许bash这里的向导有更简洁的解决方案?
alph="abcdefghijklmnopqrstuvwxyz"
for j in {0..100}; do
# Convert j to the split suffix (aa ab ac ...)
first=$(( j / 26 ))
sec=$(( j % 26 ))
echo "${alph:$first:1}${alph:$sec:1}"
done
或者,我可以将 bc
与 obase
变量一起使用,但它仅在 j<26.
的情况下输出一个数字
bc <<< 'obase=26; 5'
# 05
bc <<< 'obase=26; 31'
# 01 05
从我的头顶开始,取决于 97
beeing ASCII a
:
printf "\x$(printf %x $((97+j/26)))\x$(printf %x $((97+j%26)))\n"
printf "\$(printf %o $((97+j/26)))\$(printf %o $((97+j%26)))\n"
awk "BEGIN{ printf \"%c%c\n\", $((97+j/26)), $((97+j%26))}" <&-
printf %x $((97+j/26)) $((97+j%26)) | xxd -r -p
你也可以只写没有临时变量:
echo "${alph:j/26:1}${alph:j%26:1}"
In my use case, I do want to generate the full list
awk
应该很快:
awk 'BEGIN{ for (i=0;i<=100;++i) printf "%c%c\n", 97+i/26, 97+i%26}' <&-
使用此 Perl 单行代码并指定文件编号(从 0 开始索引)作为参数,例如:
perl -le 'print for ("aa".."zz")[@ARGV]' 0 25 26
输出:
aa
az
ba
Perl 单行代码使用这些命令行标志:
-e
: 告诉 Perl 查找内联代码,而不是在文件中。
-l
: 在执行内联代码之前去除输入行分隔符(默认情况下在 *NIX 上为 "\n"
),并在打印时附加它。
@ARGV
: 命令行参数数组。
split
命令默认生成格式为“aa”“ab”...“by”“bz”...的文件后缀...
但是在脚本中,我需要恢复这个后缀,从文件号开始作为一个整数(没有 globbing)。
我写了下面的代码,但也许bash这里的向导有更简洁的解决方案?
alph="abcdefghijklmnopqrstuvwxyz"
for j in {0..100}; do
# Convert j to the split suffix (aa ab ac ...)
first=$(( j / 26 ))
sec=$(( j % 26 ))
echo "${alph:$first:1}${alph:$sec:1}"
done
或者,我可以将 bc
与 obase
变量一起使用,但它仅在 j<26.
bc <<< 'obase=26; 5'
# 05
bc <<< 'obase=26; 31'
# 01 05
从我的头顶开始,取决于 97
beeing ASCII a
:
printf "\x$(printf %x $((97+j/26)))\x$(printf %x $((97+j%26)))\n"
printf "\$(printf %o $((97+j/26)))\$(printf %o $((97+j%26)))\n"
awk "BEGIN{ printf \"%c%c\n\", $((97+j/26)), $((97+j%26))}" <&-
printf %x $((97+j/26)) $((97+j%26)) | xxd -r -p
你也可以只写没有临时变量:
echo "${alph:j/26:1}${alph:j%26:1}"
In my use case, I do want to generate the full list
awk
应该很快:
awk 'BEGIN{ for (i=0;i<=100;++i) printf "%c%c\n", 97+i/26, 97+i%26}' <&-
使用此 Perl 单行代码并指定文件编号(从 0 开始索引)作为参数,例如:
perl -le 'print for ("aa".."zz")[@ARGV]' 0 25 26
输出:
aa
az
ba
Perl 单行代码使用这些命令行标志:
-e
: 告诉 Perl 查找内联代码,而不是在文件中。
-l
: 在执行内联代码之前去除输入行分隔符(默认情况下在 *NIX 上为 "\n"
),并在打印时附加它。
@ARGV
: 命令行参数数组。