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

관련 정보