我得到(FILENAME = 123.dat FNR = 2)致命:在以下脚本中除以零尝试错误。下一个命令是否忽略以下两个代码块并开始执行第二个记录的代码。如果不是这样的话,我怎样才能在文件的第一个记录上执行任何代码执行?
awk ' BEGIN {
FS="<[^>]+>";
RS="";
review1=1;
review2=1;
rating=0;
criteria=7;
}
#ignores the first record of each file
FNR<2 { next }
FNR==NR {
#sums all the ratings of an authors
for(i=8; i<=14;i++) {
rating+=$i;
}
#stores the average rating of each author
sum1+=rating/criterias;
#stores each average rating
total1[review1]=rating/criteria
review1++;
rating=0;
}
FNR!=NR {
.... code
}
END {
#calculates the mean(overall rating) for hotel1
mean1=sum1/review1;
printf("Mean hotel_1: %.2f\n",mean1);
} ' "$2" "$3"
答案 0 :(得分:0)
我得到(FILENAME = 123.dat FNR = 2)致命:除以零尝试错误 在以下脚本中。
sum1+=rating/criterias;
criterias
未定义,因此您会遇到错误。
下一个命令如何实际运作
下一句话迫使awk立即停止处理 当前记录并继续下一个记录。这意味着没有 对当前记录和其余的记录执行进一步的规则 当前规则的动作未执行。
FNR和NR
当awk从多个输入文件中读取时,awk NR变量将给出 相对于所有输入文件的记录总数。 Awk FNR 将为您提供每个输入文件的记录数。
如果不是这样,我怎样才能在文件的第一条记录上执行任何代码执行?
您已经执行的操作FNR<2 { next }
是正确的,您也可以将其写为FNR==1{ next }
,当awk
读取每个文件的第一条记录时,不会执行任何规则。