Рассчитать среднее значение строки с помощью awk - PullRequest
0 голосов
/ 14 мая 2018

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

образец текстового файла ввода input.txt

157361 155687 156158 156830
149610 151824 152353 152027
159195 158490 159030 159243
153222 154227 154578 154390
168761 170078 170044 170107
147166 146477 146735 147678
155745 152142 155141 154140
148860 150040 149223 148246
147239 149693 148144 147990
148045 147987 149466 149535
146945 146206 145681 145852
156559 155188 156274 154962
143169 143798 142753 144045
153814 153320 153732 156621

Я работаю над приведенной ниже командой awk:

awk '{sum=0; for(i=0; i<=NF; i++){sum+=$i}; sum/=NF; print sum}' input.txt

я получаю 156679 как ожидаемый результат для row1 avg: "где-то это чтение пустого пространства в качестве переменной) с приведенным выше выражением awk.

cal row1 excpected avg would be :(157361+155687+156158+156830)/4 = 156509

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

row1 expected avg :156509
row2 expected avg :151454

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Еще один более короткий способ достичь этого:

$ sed 's/ /+/g;s/.*/(&)\/4/g' file.txt | bc
0 голосов
/ 14 мая 2018

Номера полей в AWK начинаются с 1, а не с 0.Итак, в вашем цикле for вы должны поместить i = 1

Doing:

awk '{sum = 0; for (i = 1; i <= NF; i++) sum += $i; sum /= NF; print sum}' input.txt

Я получил правильные результаты:

156509
151454
158990
154104
169748
147014
154292
149092
148266
148758
146171
155746
143441
154372
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...