[英]Bash compute the letter suffix from the split command (i.e. integer into base 26 with letters)
split
命令默認生成格式為 "aa" "ab"... "by" "bz"... 的文件后綴
但是在腳本中,我需要恢復此后綴,從文件編號 integer(不帶通配符)開始。
我寫了下面的代碼,但也許這里的 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
使用這個 Perl 一行並將文件編號(從 0 開始)指定為 arguments,例如:
perl -le 'print for ("aa".."zz")[@ARGV]' 0 25 26
Output:
aa
az
ba
Perl 一行代碼使用這些命令行標志:
-e
:告訴 Perl 查找內聯代碼,而不是在文件中。
-l
:在執行內聯代碼之前去除輸入行分隔符(默認情況下在 *NIX 上為"\n"
),並在打印時去除 append。
@ARGV
: 命令行數組 arguments。
從我的頭頂開始,取決於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}"
在我的用例中,我確實想生成完整列表
awk
應該很快:
awk 'BEGIN{ for (i=0;i<=100;++i) printf "%c%c\n", 97+i/26, 97+i%26}' <&-
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.