Zen*_*Zen 2 awk text-processing
我写了一个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
Run Code Online (Sandbox Code Playgroud)
显然, 的值在$1
之后发生了变化$total=$total+$1
。
但我想我没有为 重新分配值$1
,为什么它意外改变了,如何解决?
在awk
你必须引用一个没有$
符号的变量时,只有total
,不是$total
。
在该awk
声明中:
$total=$total+$1
Run Code Online (Sandbox Code Playgroud)
awk
将其扩展为(注意变量在块中total
设置为):0
BEGIN{}
$0=$0+$1
Run Code Online (Sandbox Code Playgroud)
因此,您将$0
值更改为本身的值加上值第一个字段(相同),因此$0
设置为$0
. 通过设置,$0
您还更改了 的值$1
。
您想要实现的是将第一个字段的所有值相加。这可以通过以下方式实现:
awk '{a+=$1;print a}' file
Run Code Online (Sandbox Code Playgroud)
将a
变量的值$1
添加到每行中。