Linux Awk语句生成额外的输出行;跳过空白输入行

Linux Awk语句生成额外的输出行;跳过空白输入行,linux,awk,Linux,Awk,我需要计算行和列的平均值。所以基本上inputfile包含名称score1和score2,我需要从文件中读取内容,然后计算平均行和列。我得到了期望的结果,但是由于空白,我得到了一个额外的'0',如果有人能帮助我,我将不胜感激 jon,doe 5 5 sam,smith 10 5 这是我得到的输出- awk 'BEGIN {print "name\tScore1\tScore2\tAverage"} {s+=$2}

我需要计算行和列的平均值。所以基本上inputfile包含名称score1和score2,我需要从文件中读取内容,然后计算平均行和列。我得到了期望的结果,但是由于空白,我得到了一个额外的
'0'
,如果有人能帮助我,我将不胜感激

jon,doe          5        5      
sam,smith       10        5      
这是我得到的输出-

awk 'BEGIN {print "name\tScore1\tScore2\tAverage"} {s+=$2} {k+=$3} {print $1,"\t",$2,"\t",$3,"\t",($2+$3)/2} END {print "Average", s/2,k/2}' input.txt

看起来您的输入文件中有一个额外的空行或空白行(全部为空白)

添加
NF==0{next}
作为第一个模式操作对将跳过所有空行或空行,并给出所需的结果

NF==0
仅在输入行中未找到字段(数据)时匹配。
next
语句跳过当前输入行(记录)的其余语句,并在下一行(记录)上继续处理


有没有人能解释我为什么要用这样的方式写作。我们将$2和$3中的任何内容分别存储在s和k中。我想知道的是为什么不
{s+=$2;k+=$3}
?如果没有额外的帮助,看起来很奇怪merit@HuStmpHrrr你也可以这样做。我在学习,我想学习很辛苦。
name           Score1  Score2   Average
jon,doe          5        5      5
sam,smith       10        5      7.5
                                 0
Average         7.5       5   
awk 'BEGIN {print "name\tScore1\tScore2\tAverage"} NF==0 {next} {s+=$2} {k+=$3} {print $1,"\t",$2,"\t",$3,"\t",($2+$3)/2} END {print "Average", s/2,k/2}' input.txt