请运行此脚本。我想知道为什么我不能在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? 我不能为字段分配新值吗?
答案 0 :(得分:1)
BEGIN
阻止在awk开始处理文件之前发生,因此分配给各个字段没有意义,因为一旦读取了第一条记录,它们就会被覆盖。
如果您希望对awk读取的记录执行计算,则应在正常块中进行,例如您用于print
的块。
答案 1 :(得分:0)
BEGIN
blcoks(除非使用getline
),因此没有任何引用输入的变量,如NR
,FNR
, NF
,$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