Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 计算平均值并将其写入其他文件_Awk - Fatal编程技术网

Awk 计算平均值并将其写入其他文件

Awk 计算平均值并将其写入其他文件,awk,Awk,我有一份有ID和分数的学生名单,我需要用他们的平均分数再做一份。主要清单: 姓名学生索引课程组讲师id名单分数 阿索斯火枪手13,4,5,3.5 波托斯火枪手2 1 2,5,3.5 阿拉米斯火枪手3,2,1,4,5 我有这个剧本 awk“{n=split$6,a,;total=0;对于total中的v+=a[v];print total/n}”主列表 但我不想打印它,我想把它写在另一个叫做“平均分数”的文件中。最终内容应如下所示,平均值列表: 阿索斯火枪手13.875 波托斯火枪手2113.5

我有一份有ID和分数的学生名单,我需要用他们的平均分数再做一份。主要清单:

姓名学生索引课程组讲师id名单分数 阿索斯火枪手13,4,5,3.5 波托斯火枪手2 1 2,5,3.5 阿拉米斯火枪手3,2,1,4,5 我有这个剧本

awk“{n=split$6,a,;total=0;对于total中的v+=a[v];print total/n}”主列表 但我不想打印它,我想把它写在另一个叫做“平均分数”的文件中。最终内容应如下所示,平均值列表:

阿索斯火枪手13.875 波托斯火枪手2113.5 阿拉米斯火枪手3
你能试一下吗

while read first second third fourth fifth sixth
do
  if [[ "$first" =~ (^#) ]]
  then
      continue
  fi
  count="${sixth//[^,]}"    
  val=$(echo "(${#count}+1)" |  bc)
  new_val=$(echo "scale=2; (${sixth//,/+})/$val" | bc)
  echo "$first $second $third $fourth $fifth $new_val"
done < "Input_file"  > "Output_file"
使用awk:

awk '{n=split($NF,array,","); NF--; sum=0; for(i=1; i<=n; i++){sum+=array[i]} print $0,sum/n}' file

请参阅:

欢迎使用SO,找个时间给出答案,当您对问题有了一些答案时,您可以从中选择一个正确的答案。@GarciSan,意思是删除任何在bash中被视为注释的开头行。这很有效!我试过awk的第二个,非常感谢!
awk '{n=split($NF,array,","); NF--; sum=0; for(i=1; i<=n; i++){sum+=array[i]} print $0,sum/n}' file
athos musketeer 1 1 1 3.875 porthos musketeer 2 1 1 3.5 aramis musketeer 3 2 2 3