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

标签 linux awk

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/

相关文章:

bash - 我的 awk 用户函数无法在 bash 脚本中运行

c - 在 GCC 或 G++ (Linux) 中使用 __declspec()

linux - bash 从列表中选择文件的最新版本

使用 awk 解析日志条目

linux - sed 查找并替换 IP 地址后包含字符串的行

linux - 如何使用awk提取自定义文件名?

linux - 由于需要 VPN,git-svn 拒绝了基本挑战

linux - 通过示例应用程序学习 Linux 应用程序编程

linux - 通过 ssh 杀死远程进程

mysql - MySql SSl 连接问题