Linux Awk语句生成额外的输出行;跳过空白输入行
我需要计算行和列的平均值。所以基本上inputfile包含名称score1和score2,我需要从文件中读取内容,然后计算平均行和列。我得到了期望的结果,但是由于空白,我得到了一个额外的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}
'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