Bash(awk)-从数行中获取平均值
我要做一个bash程序,它读取一个名字,存储它,然后读取分数,看看平均值是否在60以上。如果是,打印出他们的名字。所以文件看起来像这样Bash(awk)-从数行中获取平均值,awk,Awk,我要做一个bash程序,它读取一个名字,存储它,然后读取分数,看看平均值是否在60以上。如果是,打印出他们的名字。所以文件看起来像这样 tim 50 60 70 roy 90 80 90 程序应该只打印“roy”,因为他是唯一一个成绩合格的人。这就是我得到的。我只是不知道该把这些东西放在哪里,比如;,{},and()所以我确信我的代码很糟糕: #!/bin/bash awk '{name=$i} {avg=0} { count=0; for(i=2;i<=NF;i++)
tim 50 60 70
roy 90 80 90
程序应该只打印“roy”,因为他是唯一一个成绩合格的人。这就是我得到的。我只是不知道该把这些东西放在哪里,比如;,{},and()所以我确信我的代码很糟糕:
#!/bin/bash
awk '{name=$i}
{avg=0}
{
count=0;
for(i=2;i<=NF;i++)
avg+=$i
count++;
}
avg=avg/count {
if(avg >= 60)
printf("%s ", name)
}'
#/bin/bash
awk'{name=$i}
{avg=0}
{
计数=0;
对于(i=2;i=60)
printf(“%s”,名称)
}'
令人惊讶的是,它编译时没有错误,但没有打印任何内容。您就快到了:
awk '{
name=$1
tot=0
for(i=2;i<=NF;i++)
tot+=$i
if(tot/(NF-1)>60)
print name
}' yourfile
awk'{
姓名=$1
tot=0
对于(i=2;i60)
印刷品名称
}“你的档案
这很有效!但有两个问题,为什么要放$NF和NF-1?这两条语句在做什么?$NF是一个错误——因为本周编写了太多Perl。我已经更正了它。不需要使用“count”变量,因为awk好心地告诉我们“NF”中有多少个字段,我们只需减去一个,就可以将名称作为字段之一。@MarkSetchell保留count
,但在块的顶部显式地将其定义为count=NF-1
。作为一个例子,我已经包括了name=$1
。这是一种使代码自文档化的好方法。