AWK рассчитать среднее или ноль - PullRequest
8 голосов
/ 08 декабря 2011

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

grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }'

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

Ответы [ 3 ]

15 голосов
/ 09 декабря 2011

Вы увеличиваете нагрузку (в среднем), порождая дополнительный процесс, чтобы сделать все, что может сделать первый.Совместное использование grep и awk - это красный флаг.Вам лучше написать:

awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file
5 голосов
/ 08 декабря 2011

Попробуйте это:

... END { print NR ? sum/NR : 0 }
1 голос
/ 08 декабря 2011

Используйте троичный оператор awk, т.е. m ? m : n, что означает, что если m имеет значение '?', Используйте его, иначе ':' используйте это другое значение. И n, и m могут быть строками, числами или выражениями, которые создают значение.

grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum / NR : 0.0 }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...