Unix 文件中的awk bash平均值计算

Unix 文件中的awk bash平均值计算,unix,awk,Unix,Awk,编写unix命令以显示每个科目成绩超过50分且平均成绩大于或等于75分的所有学生的名单、姓名和平均成绩 平均值可计算为(subc_1+subc_2)/2 输入: roll ,name,subScore1,subScore2 123,a,88,78 101,b,76,90 812,c,78,98 输出: 123 a 83 812 c 78 我的代码: awk 'BEGIN {FS=',';OFS=' '} {if(NR>1 (&& $3>50 &&

编写unix命令以显示每个科目成绩超过50分且平均成绩大于或等于75分的所有学生的名单、姓名和平均成绩

平均值可计算为(subc_1+subc_2)/2

输入:

roll ,name,subScore1,subScore2
123,a,88,78
101,b,76,90
812,c,78,98
输出:

123 a 83
812 c 78
我的代码:

awk 'BEGIN {FS=',';OFS=' '} {if(NR>1 (&& $3>50 && $4>50) && ($3+$4)/2 >= 75){print $1,$2,($3+$4)/2}}' input_file
我不知道为什么我会出错。 请帮助大家。

编辑:添加更通用的解决方案,其中OP的输入文件可能有4个以上的字段/列。在这种情况下,可以尝试以下内容

awk '
BEGIN{
  FS=","
}
FNR==1{
  next
}
{
  for(i=3;i<=NF;i++){
    if($i>=50){
      ++count
    }
    sum+=$i
  }
  avg=(sum/count)
  if(count==(NF-2) && avg>=75){
    print $1,$2,avg
  }
  count=sum=avg=0
}
'   Input_file
编辑:添加更通用的解决方案,其中OP的输入文件可能有4个以上的字段/列,在这种情况下,可以尝试以下内容

awk '
BEGIN{
  FS=","
}
FNR==1{
  next
}
{
  for(i=3;i<=NF;i++){
    if($i>=50){
      ++count
    }
    sum+=$i
  }
  avg=(sum/count)
  if(count==(NF-2) && avg>=75){
    print $1,$2,avg
  }
  count=sum=avg=0
}
'   Input_file

NR>1-e
awk
不是
shell
,它有自己的(不同的)语言。没有
-e
。你所说的
-e
是什么意思?它应该做什么?是的,你可以用“&&”代替-e@AkshaySingh,您不需要将OFS的
设置为空格,因为其默认值本身就是空格。从逻辑上看,它看起来不错,但我还没有对它进行测试,而且在我相信您已经知道的一些地方,您也不需要
&&
。感谢您分享您的努力,请继续努力,并确保您始终以代码的形式在问题中添加您的努力,这是非常受鼓励的,因此,快乐学习。感谢先生,您一如既往的快速反馈,让我们保持积极性…您不能在任何shell中的单引号删除字符串(包括脚本)中使用单引号。在语法上,您需要
awk'BEGIN{FS=“,”OFS=“”}
,而不是
awk'BEGIN{FS=“,”OFS=“”}
(当然
OFS=“”
实际上并没有做任何事情,因为这是默认设置)。wrt
if(NR>1(&&&$3>50…
)-我不知道你在哪里写
cond1(&&cond2)
,而不是像你在脚本的其余部分那样写
cond1&&(cond2)
NR>1-e
awk
不是
shell
,它有自己的(不同)语言。没有
-e
。你所说的
-e
是什么意思?它应该做什么?是的,你可以使用“&&&”而不是-e@AkshaySingh,您不需要将
OFS
设置为空格,因为它的默认值本身就是空格。从逻辑上看,它看起来还可以,但我还没有测试过它,而且在我相信您已经知道的一些地方,您也不需要
&
。感谢您分享您的成果,请继续努力,并确保始终在中添加您的成果您的问题中的代码形式非常受鼓励,祝您学习愉快。感谢您一如既往的快速反馈,保持我们的积极性…您不能在任何shell中的单引号删除字符串(包括脚本)中使用单引号。在语法上,您需要的是
awk'BEGIN{FS=',';OFS='}
,而不是
awk'BEGIN{FS=,“OFS=”}
(当然,
OFS=“”
实际上没有做任何事情,因为这是默认设置)。wrt
if(NR>1(&&&$3>50…
)-我不知道在哪里可以编写
cond1(&&cond2)
而不是
cond1&(cond2)
,就像你在脚本的其余部分那样。