awk:分割输入数字字符串并对单个字符进行数学运算

awk:分割输入数字字符串并对单个字符进行数学运算

我必须以一个数字作为第一个参数,并对各个数字进行数学运算。

下面的程序应该输出所有单独的数字。

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

我用命令执行./armstrong_numbers.sh 657823并收到错误'{split('$INPUT',a,"");printf "'${@$INPUT}'"}': 错误替换

答案1

你把数组搞混bashawk

您的示例命令将其拆分$INPUTawk数组名为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

相关内容