基数変換エコーの前にゼロを強制します。

基数変換エコーの前にゼロを強制します。

次のように構成された一連の三項値を取得しようとしています。

0 0 0 0 1    
0 0 0 0 2    
0 0 0 1 0    
0 0 0 1 1  
.........  
.........  
2 2 2 2 2 

これを行うには、次を使用します。

 for i in `seq 001 242`  
 do echo  'obase=3; '$i'' | bc | sed  's/\(.\{1\}\)/\1 /g'  
 done

しかし、私は理解しています

1  
2  
1 0  
1 1  
....  
2 2 2 2 2  

結果に欠けているゼロは、他のスクリプトパラメータとして使用するために重要なので、どのように強制的にエコーするのですか?

ベストアンサー1

数値の書式設定の場合printf

for i in $( seq 1 242 ) ; do
    printf '%05d\n' $( bc <<< 'obase=3; '$i )
done | sed  's/\(.\)/\1 /g'

また、後ろに空の文字列を入れる必要もなく、正規表現で量子化を行う必要$iもありません。{1}

zsh、ksh93、bash、または次の中かっこ拡張を使用する方が高速ですyash -o braceexpand

printf '%s\n' {0..2}\ {0..2}\ {0..2}\ {0..2}\ {0..2}

おすすめ記事