簡體   English   中英

Bash 從拆分命令中計算字母后綴(即 integer 轉換為帶字母的 26 進制)

[英]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

或者,我可以將bcobase變量一起使用,但它僅在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM