字段上的awk sum加法数学& colums $ - 奇怪的结果

时间:2017-03-23 19:12:29

标签: awk calculated-columns

请运行此脚本。我想知道为什么我不能在BEGIN中分配1美元,2美元和3美元来计算和打印它们:

    BEGIN {
        OFS=FS=";" ;
        #  @include getopt.awk
    geb = 4;
    dis = 3;
    $1 = 10;
    $2 = 0.19;
    $3 = 20;
    summe = geb+dis+$1;
    colsum = $1+$2+$3
}
{
    print $1 FS $2 FS $3 FS "Fee" " "summe FS $1+$3 FS 3+4+$1 FS colsum}

例如,我希望

print $1+$3

给了我30? 我不能为字段分配新值吗?

2 个答案:

答案 0 :(得分:1)

BEGIN阻止在awk开始处理文件之前发生,因此分配给各个字段没有意义,因为一旦读取了第一条记录,它们就会被覆盖。

如果您希望对awk读取的记录执行计算,则应在正常块中进行,例如您用于print的块。

答案 1 :(得分:0)

在读取任何输入之前执行

BEGIN blcoks(除非使用getline),因此没有任何引用输入的变量,如NRFNRNF$0, $1, $2 ...$10等字段将在BEGIN块中定义。

实际上,BEGIN块用于在您阅读第一行之前执行的操作

(除非使用getline) - 不推荐

akshay@db-3325:/tmp$ seq 1 5 >test
akshay@db-3325:/tmp$ cat test 
1
2
3
4
5

# Default action by awk
akshay@db-3325:/tmp$ awk 'BEGIN{print $1}' test

# if you use getline
akshay@db-3325:/tmp$ awk 'BEGIN{getline;print $1}' test
1