`{$total=$total+$1}`에서 $1의 가치가 변경되는 이유는 무엇입니까?

`{$total=$total+$1}`에서 $1의 가치가 변경되는 이유는 무엇입니까?

awk특정 열의 총 값을 계산하는 명령을 작성했는데 예상치 못한 일이 발생했습니다.

# THE CONTENT OF TEST FILE
1
2
3
4

# MY AWK COMMAND
awk 'BEGIN {total=0} {print $1; $total=$total+$1; print $1, $total} END {print $total}' test

# RESULT
1
2 2
2
4 4
3
6 6
4
8 8
8

분명히 이후에는 의 값이 $1변경되었습니다 $total=$total+$1.
그런데 값을 재할당하지 않은 것 같은데 $1, 왜 예상치 못하게 바뀌었나요? 어떻게 해결해야 할까요?

답변1

부호 없는 변수는 가 아닌 로만 awk참조해야 합니다 .$total$total

awk진술에서:

$total=$total+$1

awk이를 다음으로 확장합니다(변수는 블록에서 으로 설정되어 있음 total).0BEGIN{}

$0=$0+$1

따라서 $0값을 자체 값과 첫 번째 필드의 값(동일함)으로 변경하므로 $0값을 두 배로 설정합니다 $0. 설정을 사용하면 $0값도 변경됩니다 $1.


달성하려는 것은 첫 번째 필드의 모든 값을 함께 추가하는 것입니다. 이는 다음을 통해 달성할 수 있습니다.

awk '{a+=$1;print a}' file

a각 줄은 $1변수 값에 값을 더합니다.

관련 정보