下一个命令如何实际运行

时间:2017-02-27 19:01:04

标签: awk

我得到(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"

1 个答案:

答案 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读取每个文件的第一条记录时,不会执行任何规则。