Универсальный awk сценарий для вычисления среднего числа на любое поле через параметр командной строки

Я думаю, что существует три различных аспекта этой проблемы, которую Вы тестируете.

первый: действительно ли мой алгоритм является правильным? Таким образом, учитывая правильно функционирующий генератор случайных чисел, это произведет даты, которые случайным образом распределяются через диапазон?

второй: алгоритм обрабатывает пограничные случаи правильно? Таким образом, когда генератор случайных чисел производит самые высокие или самые низкие допустимые значения, что-нибудь повреждается?

третий: моя реализация работы алгоритма? Таким образом, учитывая известный список псевдослучайных исходных данных, это производит ожидаемый список псевдослучайных дат?

первые две вещи не что-то, что я встроил бы в комплект поблочного тестирования. Они - что-то, что я подтвердил бы при разработке системы. Я, вероятно, сделал бы это путем записи тестовой обвязки, которая генерировала огромное количество дат и выполнила тест хи-квадрата, как daniel.rikowski предложенный. Я также удостоверился бы, что эта тестовая обвязка не завершалась, пока она не обработала оба из пограничных случаев (предполагающий, что мой диапазон случайных чисел является достаточно маленьким, что мне может сойти с рук это). И я зарегистрировал бы это, так, чтобы любой, приход и попытка улучшить алгоритм будут знать, что это - повреждающееся изменение.

последний что-то, на что я сделал бы модульный тест. Я должен знать, что ничто не вползло в код, который повреждает его реализацию этого алгоритма. Первый знак, который я получу, когда это произойдет, состоит в том, что тест перестанет работать. Тогда я вернусь к коду и узнаю, что кто-то еще думал, что они фиксировали что-то и повредили его вместо этого. Если бы кто-то сделал , фиксируют алгоритм, это было бы на них для фиксации этого теста также.

8
задан Ritesh 16 September 2009 в 16:17
поделиться

2 ответа

Этот будет делать то, что вы хотите:

$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }

$ cat data
1 5 7
3 6 5
8 4 6

$ avg.awk 1 data
4

$ avg.awk 2 data
5

$ avg.awk 3 data
6
11
ответ дан 5 December 2019 в 10:43
поделиться
{ tot += $field; count++ }
END { print tot/count }

call like awk -v field=3 -f avg.awk input.file

5
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: