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

字段上的awk和加法数学&;colums$-奇怪的结果,awk,calculated-columns,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

请运行此脚本。我想知道为什么我不能在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块?!
我不能给字段分配新值吗?

在awk开始处理文件之前会出现
BEGIN
块,因此分配给各个字段没有意义,因为一旦读取第一条记录,这些字段就会被覆盖


如果您希望对awk读取的记录执行计算,这应该在正常块中完成,就像您用于
打印
开始
的块一样,在读取任何输入之前执行blcoks(除非使用
getline
),因此没有任何引用输入的变量,例如
NR
FNR
NF
,将在任何
BEGIN
块中定义
$0、$1、$2…$10等字段

实际上,
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

现在可以了。谢谢现在出现了一个问题:当我重新设置字段的范围,如原始订单$1、$2、$3到$2、$1、$3,以及几行之后我使用$1时,我是“抓取”原始字段1还是新移动的字段?@prestalearner对于读取的每个记录,
$1
设置为第一个字段。你以前做过什么都不重要。我还必须替换所有,in。那是消费者发现问题的时候了:gsub(/\,/,);负和=(10美元+11美元)*-1;作品now@prestalearner我认为您所谈论的
vs
是由于您的区域设置,因此修复可能比在awk中操作数据更适合您。谷歌地区。