列表中的平均分数

时间:2019-06-11 18:26:06

标签: bash awk

对不起,如果我写的不好,这是我的第一篇文章。

我在一个文件中有一个列表,其中列出了学生的姓名,身份证,成绩等(见下文):

我想计算另一个文件中的平均标记,但是我不知道如何只取这些标记并将平均值写入另一个文件中。

谢谢;

#name surname student_index_number course_group_id lecturer_id list_of_marks
athos musketeer 1 1 1 3,4,5,3.5
porthos musketeer 2 1 1 2,5,3.5
aramis musketeer 3 2 2 2,1,4,5

while read line; do
    echo "$line" | cut -f 6 -d ' '
done<main_list

3 个答案:

答案 0 :(得分:1)

awk 'NR>1{n=split($NF,a,",");for(i=1;i<=n;i++){s+=a[i]} ;print $1,s/n;s=0}' input
athos 3.875
porthos 3.5
aramis 3

对于除了header(NR>1以外的所有行,将过滤出header),选择最后一列并以逗号分隔为较小的数字。使用for loop对所有标记的值求和,然后除以总主题数。

答案 1 :(得分:0)

(未经测试)

awk '{ n = split($6, a, ","); total=0; for (v in a) total += a[v]; print total / n }' main_list

答案 2 :(得分:0)

在纯BASH解决方案中,请您尝试一次。

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