我编写了一个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
添加到变量的值中。