awk:入力数値文字列を分割し、個々の文字に対して数学演算を実行します。

awk:入力数値文字列を分割し、個々の文字に対して数学演算を実行します。

数値を最初の引数として使用し、個々の数値に対して数学を実行する必要があります。

以下のプログラムはすべての個々の数字を出力する必要があります。

INPUT=$1
doMath() {
  awk '{split('$INPUT',a,"");printf "'${@$INPUT}'"}' 
}
doMath

コマンドで実行しましたが、./armstrong_numbers.sh 657823エラーが発生しました。'{split('$INPUT',a,"");printf "'${@$INPUT}'"}': 無効な置換

答え1

bashあなたは配列を混ぜましたawk

あなたの例のコマンドはそれを$INPUT次のように分割します。awk配列名はですa。また、代わりに
使用する必要があります。それ以外の場合は、提供していない入力を待ちます。BEGIN{...}{...}awk

この試み、

awk 'BEGIN{split('$INPUT',a,""); for (k in a) print a[k]; }'

または、誤字の問題を避けるために変数をよりよく設定してください-v

awk -v "input=$INPUT" \
  'BEGIN{split(input,a,""); for (k in a) print a[k]; }'

出力は次のとおりです

6
5
7
8
2
3

または単にすべてのことを行いますbash

for ((i=0;i<${#INPUT};i++)); do
  echo ${INPUT:$i:1};
done

関連情報