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

时间:2015-10-10 23:26:57

标签: linux awk

jon,doe          5        5      
sam,smith       10        5      

我需要计算行和平均值的平均值柱。所以输入文件基本上包含name score1和score2,我需要从文件中读取内容,然后按行和列方式计算平均值。我得到了理想的结果,但是由于空白区域我还有一个'0',如果有人可以提供帮助我会很感激。

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

这是我得到的输出 -

name           Score1  Score2   Average
jon,doe          5        5      5
sam,smith       10        5      7.5
                                 0
Average         7.5       5   

1 个答案:

答案 0 :(得分:2)

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

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

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

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