Средние оценки из списка - PullRequest
2 голосов
/ 11 июня 2019

Извините, если я не пишу хорошо, это мой первый пост.

У меня есть список в одном файле с именем, идентификатором, оценками и т. Д. Учащихся (см. Ниже):

И я хочу вычислить среднюю оценку в другом файле, но я не знаю, как взять только оценки и записать среднее значение в другом файле.

Спасибо;

#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 ]

1 голос
/ 11 июня 2019
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

Для всех строк, кроме заголовка (NR>1 отфильтрует заголовок), возьмите последний столбец и разделите на меньшие числа запятой. Используя for loop, суммируйте значение всех оценок и затем разделите на общее количество предметов.

0 голосов
/ 12 июня 2019

В чистом 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"
0 голосов
/ 11 июня 2019

Что-то вроде (не проверено)

awk '{ n = split($6, a, ","); total=0; for (v in a) total += a[v]; print total / n }' main_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...