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
).0
BEGIN{}
$0=$0+$1
따라서 $0
값을 자체 값과 첫 번째 필드의 값(동일함)으로 변경하므로 $0
값을 두 배로 설정합니다 $0
. 설정을 사용하면 $0
값도 변경됩니다 $1
.
달성하려는 것은 첫 번째 필드의 모든 값을 함께 추가하는 것입니다. 이는 다음을 통해 달성할 수 있습니다.
awk '{a+=$1;print a}' file
a
각 줄은 $1
변수 값에 값을 더합니다.