Расчет среднего значения данных в нескольких файлах - PullRequest
0 голосов
/ 11 марта 2019

Я знаю, что формулировка вышеупомянутого вопроса довольно неясна, но я сделаю все возможное, чтобы объяснить.У меня есть набор данных, состоящий из разных значений идентификатора отеля и набора оценок для каждого соответствующего отеля.Вот код, который у меня есть сейчас:

cd "$1" || exit 1

grep "<Overall>" hotel_*.dat | sed 's/\.dat:<Overall>/ /'

(код в основном извлекает данные из файлов и выводит их в более точном формате)

Это вывод кода: пример выходных данных терминала

Как вы можете видеть на рисунке, мои данные состоят из двух столбцов.То, что я пытаюсь сделать, - это взять среднее значение данных в столбце 2 для каждого идентификатора отеля, поэтому в основном получим результат: (идентификатор отеля) (средний).Каждый идентификатор отеля должен иметь свое собственное среднее значение.

То, что я пытался сделать, было:

cd "$1" || exit 1

grep "<Overall>" hotel_*.dat | sed 's/\.dat:<Overall>/ /' | awk '{SUM+= $2} END {print SUM/NR}'

Это берет среднее значение всех данных и просто выводит число вместо среднего для каждогоИдентификатор отеля в формате (идентификатор отеля) (средний).

Надеюсь, моего объяснения достаточно.

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете использовать awk для агрегирования, как показано ниже:

$ cat file.txt
hotel_1 10
hotel_2 15
hotel_1 5

$ awk '{sum[$1] += $2; counts[$1]++;} END {for (i in sum) print i, sum[i]/counts[i];}'  file.txt
hotel_1 7.5
hotel_2 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...