![awk: 입력 숫자 문자열을 분할하고 개별 문자에 대해 수학 연산을 수행합니다.](https://linux55.com/image/143165/awk%3A%20%EC%9E%85%EB%A0%A5%20%EC%88%AB%EC%9E%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%B6%84%ED%95%A0%ED%95%98%EA%B3%A0%20%EA%B0%9C%EB%B3%84%20%EB%AC%B8%EC%9E%90%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%88%98%ED%95%99%20%EC%97%B0%EC%82%B0%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4..png)
숫자를 첫 번째 인수로 사용하고 개별 숫자에 대해 수학을 수행해야 합니다.
아래 프로그램은 모든 개별 숫자를 출력해야 합니다.
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