2

split命令默认生成格式为“aa”“ab”...“by”“bz”...的文件后缀

但是在脚本中,我需要恢复这个后缀,从文件号开始作为一个整数(没有通配符)。

我写了以下代码,但也许这里的 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

或者,我可以bcobase变量一起使用,但在 j<26 的情况下它只输出一个数字。

bc <<< 'obase=26; 5'
# 05
bc <<< 'obase=26; 31'
# 01 05
4

2 回答 2

2

使用这个 Perl 单行并指定文件编号(0 索引)作为参数,例如:

perl -le 'print for ("aa".."zz")[@ARGV]' 0 25 26

输出:

aa
az
ba

Perl 单行器使用这些命令行标志:
-e:告诉 Perl 查找内联代码,而不是在文件中。
-l: 在执行内联代码之前去除输入行分隔符("\n"默认情况下在 *NIX 上),并在打印时附加它。

@ARGV: 命令行参数数组。

于 2020-12-02T14:06:18.697 回答
1

从我的头顶,取决于97beeing 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}"

在我的用例中,我确实想生成完整列表

awk应该很快:

awk 'BEGIN{ for (i=0;i<=100;++i) printf "%c%c\n", 97+i/26, 97+i%26}' <&-
于 2020-12-02T11:33:48.060 回答