jon,doe 5 5
sam,smith 10 5
我需要计算行和列的平均值。所以基本上输入文件包含名称 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
最佳答案
看起来您的输入文件中有一个额外的空行或空白(全是空白)行。
添加 NF==0 {next}
作为第一个模式 Action 对将跳过所有空行或空白行并给出所需的结果。
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
关于linux - awk 语句生成额外的输出行;跳过空白输入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33060026/